gpt4 book ai didi

android - 获取不在 View 中的 ListView 子项

转载 作者:IT王子 更新时间:2023-10-28 23:35:40 26 4
gpt4 key购买 nike

对于我正在开发的应用程序,我正在尝试获取 ListView 的子项。为此,我有以下代码:

View listItem = mListView.getChildAt(i);

但是,这仅适用于视野范围内的 child 。我还需要接触到不在视线范围内的 child 。我该怎么做?

编辑:

将建议的方法与我已经使用的方法进行比较,我发现以下内容:

RelativeLayout listItem1 = (RelativeLayout) mListView.getAdapter().getView(i, null, mListView);
RelativeLayout listItem2 = (RelativeLayout) mListView.getChildAt(i);
Log.d("Checks", "listItem1: " + listItem1);
Log.d("Checks", "listItem2: " + listItem2);

08-27 14:16:56.628: D/Checks(15025): listItem1: android.widget.RelativeLayout@2c5f2920
08-27 14:16:56.628: D/Checks(15025): listItem2: android.widget.RelativeLayout@2c06d938
08-27 14:16:56.628: D/Checks(15025): listItem1: android.widget.RelativeLayout@2c72dfb0
08-27 14:16:56.628: D/Checks(15025): listItem2: android.widget.RelativeLayout@2bfabe50
08-27 14:16:56.638: D/Checks(15025): listItem1: android.widget.RelativeLayout@2c730c18
08-27 14:16:56.638: D/Checks(15025): listItem2: android.widget.RelativeLayout@2c0d3e38
08-27 14:16:56.638: D/Checks(15025): listItem1: android.widget.RelativeLayout@2c12ebc0
08-27 14:16:56.638: D/Checks(15025): listItem2: android.widget.RelativeLayout@2bddbf70
08-27 14:16:56.648: D/Checks(15025): listItem1: android.widget.RelativeLayout@2c131828
08-27 14:16:56.648: D/Checks(15025): listItem2: android.widget.RelativeLayout@2bdf3270
08-27 14:16:56.648: D/Checks(15025): listItem1: android.widget.RelativeLayout@2c140de0
08-27 14:16:56.648: D/Checks(15025): listItem2: android.widget.RelativeLayout@2c0c8d30

listItem2 指向 ListView 中的实际 View ,这是我想要的,只是它只适用于可见的 View 。从日志文件可以看出listItem1和listItem2不对应。

编辑 2:

我想出了以下内容:

for (int i = 0; i < mListView.getCount(); i++) {
RelativeLayout listItem = (RelativeLayout) mListView.getAdapter().getView(i, mListView.getChildAt(i), mListView);
}

这将正确返回列表中所有可见项目的 View 。但是,它会为看不见的 View 返回不同的 View 。

编辑 3:

感谢 nfirex,我有一个可行的答案。这将返回 View ,即使它们不在视线范围内:

public View getViewByPosition(int position, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

if (position < firstListItemPosition || position > lastListItemPosition ) {
return listView.getAdapter().getView(position, listView.getChildAt(position), listView);
} else {
final int childIndex = position - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}

最佳答案

你需要方法Adapter.getView() :

final View view = mListView.getAdapter().getView(position, null, mListView);

更新:

您需要创建您的方法。像这样的:

public View getViewByPosition(int position, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

if (position < firstListItemPosition || position > lastListItemPosition ) {
return listView.getAdapter().getView(position, null, listView);
} else {
final int childIndex = position - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}

关于android - 获取不在 View 中的 ListView 子项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18463101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com