xiaoyaovsxin 于 2013.01.31 10:36 提问
- android ListView mListView.getChildAt(i)为空,求怎么解决?
-
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { for (int i = 0; i < mListView.getCount(); i++) { View callLogView = mListView.getChildAt(i); mRelativeLayout = (LinearLayout)callLogView.findViewById(R.id.myShow); if(i == position){ if(mRelativeLayout.getVisibility() == View.GONE){ mRelativeLayout.setVisibility(View.VISIBLE); } else{ mRelativeLayout.setVisibility(View.GONE); } }else{ mRelativeLayout.setVisibility(View.GONE); } } } });
如题,代码以附上,我现在想做的事是在点击一项ListView后显示出一个布局,而其它项的ListView隐藏,但在超过 mListView.getChildCount()后会出现空指针,求解!
-
- xiaoyaovsxin 2013.02.02 11:52
- 已采纳
看来,没有一个十全十美的办法,我采用一个实用的方法,使用mListView.getChildCount()循环,然后再写个滑动监听事件,滑动时再隐藏控件。
-
- hotkarriver 2013.02.06 13:12
在adapter中的getview方法里操作每个view
-
- c_m_l 2013.09.24 18:41
View v = listView.getAdapter().getView(arg2,null,listView);
TextView t = (TextView) v.findViewById(R.id.textview);
-
- xiaoyaovsxin 2013.01.31 11:57
没人知道么?mListView.getChildAt(i)在超过 mListView.getChildCount()后会出现空指针怎么解决??
-
- CSDN_Ask 2013.01.31 14:28
int wantedPosition = 10; // Whatever position you're looking for
int firstPosition = listView.getFirstVisiblePosition() - listView.getHeaderViewsCount(); // This is the same as child #0
int wantedChild = wantedPosition - firstPosition;
// Say, first visible position is 8, you want position 10, wantedChild will now be 2
// So that means your view is child #2 in the ViewGroup:
if (wantedChild < 0 || wantedChild >= listView.getChildCount()) {
Log.w(TAG, "Unable to get view for desired position, because it's not being displayed on screen.");
return;
}
// Could also check if wantedPosition is between listView.getFirstVisiblePosition() and listView.getLastVisiblePosition() instead.
View wantedView = listView.getChildAt(wantedChild);
你没有遍历列表视图的子类,这可能会影响性能。
-
- xiaoyaovsxin 你这样还是不能访问到所有子类的。只能访问到可见的。
- 大约 5 年之前 回复
-
- xiaoyaovsxin 兄弟,详细些,貌似理解错了!
- 大约 5 年之前 回复
-
- LiDaming_and 2013.02.01 13:59
你不能在 onItemClick 中实现。
因为你只能访问可见性的子类,不是所有的子类。
在 onItemClick 你可以在 adapter 中发送位置,然后在 getView 中设置逻辑改变 view, 并且更新 listview 中的 adapter。
-
- xiaoyaovsxin 请问怎么才能访问所有的子类呢?在哪能实现?
- 大约 5 年之前 回复
-
- yongyong_21 2013.02.01 14:23
AdapterView.getCount()返回的是数据项的数量,这可能比可见视图要多。因为你想在当前的 ListView 项中找根本就不存在的 Views ,就会获得空指针异常。
为解决这个问题,你需要使用getFirstVisiblePosition()
首先找到 Listview 中的第一个可见项,使用getLastVisiblePosition()
找到最后一个可见项。
使用下面的循环语句:
int num_of_visible_view=mListView.getLastVisiblePosition() -
mListView.getFirstVisiblePosition();
for (int i = 0; i < num_of_visible_view; i++) {
// do your code here
}
-
- xiaoyaovsxin 3q
- 大约 5 年之前 回复
-
- xiaoyaovsxin 这中方法也是有问题的,如果有2页list,即10项,如果按第一页的第二项(即第二项的list),此时第二页的第二项也会显示(即第二和第七项list都会显示)。
- 大约 5 年之前 回复
- 其他相关推荐