我有一个Android ListView视图,每行包含1个textview和2个edittexts:
<TextView
android:id="@+id/topic_id"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight"1"
/>
<EditText
android:id="@+id/topic_name"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="2"
android:textStyle="bold"
android:textSize="15sp"
/>
<EditText
android:id="@+id/topic_description"
android:layout_height="wrap_content"
android:layout_width="0dp"
android:layout_weight="4"
android:textSize="15sp"
/>
我希望textview只能获得setOnLongClickListener,所以我 写了下一个循环:
for (int i=0;i<myListview.getCount();i++)
{
//Here I get the (i) row in myListview
View v = myListview.getChildAt(i);
//Here I get the textView topic_id in the (i) row
TextView topic_id = (TextView) v.findViewById(R.id.topic_id);
//And here I put the setOnLongClickListener for this textView
topic_id.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View v) {
//do something...
return true;
}
});
}
问题是这个循环失败了: 经过几次迭代,行
View v = myListview.getChildAt(i);
将v表示为null,因为getChildAt(i)不会 处理当前无法看到的行(需要滚动的行) 在列表中观看它们。)
如果有人知道怎么做,我会很感激帮助。
答案 0 :(得分:1)
您绝对应该在ListAdapter
的{{1}}方法中执行此操作,而不是手动遍历getView()
子视图。