如何仅在Listview中的特定列上设置OnLongClickListener但是对于所有行

时间:2015-05-24 11:27:57

标签: android listview

我有一个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)不会 处理当前无法看到的行(需要滚动的行) 在列表中观看它们。)

如果有人知道怎么做,我会很感激帮助。

1 个答案:

答案 0 :(得分:1)

您绝对应该在ListAdapter的{​​{1}}方法中执行此操作,而不是手动遍历getView()子视图。