【问题标题】:How to get List View Item onTouch method?如何获取列表视图项 onTouch 方法?
【发布时间】:2011-07-05 07:04:25
【问题描述】:

我有一个 ListView,我想对列表项执行拖放操作。我正在覆盖具有两个参数的onTouch 方法

@Override public boolean onTouch(View view, MotionEvent me) {}

在视图中我得到了完整的 ListView。如何在按下哪个键时获得特定的 TextView?

如果我长按并获得该视图但我不想执行长按操作,我可以拖动项目。

有什么方法可以在onTouch 中获取所选项目的位置?

【问题讨论】:

  • @Flo.. 它的代码有点复杂。 :(
  • 嘿,我也面临同样的问题,当我们在 ListActivity 中为 ListView 实现 setOnTouchListener 时,任何人都知道如何获取列表项的位置。
  • 我想你可以在这里找到答案 - stackoverflow.com/questions/17384131/…

标签: android listview drag-and-drop


【解决方案1】:

一种方法是实现一个自定义Adapter,您可以使用它来填充您的ListView。在您的AdaptergetView 方法中,您可以在您创建的视图上调用setOnClickListener,并以这种方式添加一个项目点击监听器。

setOnClickListener of a ListView not working 中有一些示例代码。

【讨论】:

  • 我认为对于拖放操作,最好实现 OnTouchListener 而不是 OnClickListener。
  • @Flo 好点!我错过了它是用于 dran and drop 而不是在 ansering 时进行简单的点击处理。 @Harshad 在stackoverflow.com/questions/2909311/…中有一些有用的拖放参考代码
  • 我的应用程序有一个 ViewFlipper(实现 OnGestureListener)分配给 ListView 项目,我注意到 OnGestureListener 阻止了适配器的 OnItemClickListener 触发 onItemClick()。解决方案是将setOnClickListener 分配给ListView 中的特定项目。现在自定义复合视图仍然触发onSingleTapUp,然后是 OnClickListener 的onClick()
【解决方案2】:

我在llItem 标签中添加了项目位置 在适配器中:

public View getView(int position, View convertView, ViewGroup parent) {
   ...
   llItem = (LinearLayout) rowView.findViewById(R.id.lItem);
   llItem.setTag("" + position);
   llItem.setOnTouchListener(itemTouch);
   ...
}

以及从标签中提取的项目位置

 OnTouchListener itemTouch = new OnTouchListener() {
    private int position;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
       LinearLayout ll = (LinearLayout)v.findViewById(R.id.lItem);
       String itemTag = ll.getTag().toString();
       int itemPosition = Integer.parseInt(itemTag);
       ...
    }
 }

【讨论】:

  • 通过这样做,列表选择器被禁用!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2011-02-19
  • 2012-06-12
  • 1970-01-01
相关资源
最近更新 更多