使用自定义视图和CursorAdapter在ListView中单击的位置

时间:2018-07-16 19:57:38

标签: android listview onclick cursor android-cursoradapter

我正在使用npm install eslint --save-dev 来显示ListView中的数据。每个cursor行都使用以下ListView定义的自定义布局。

当我单击ID为template_item.xml的{​​{1}}时,我想获取包含该TextView的{​​{1}}的行位置。我需要行号,以便可以从tv_item_name中提取其他列,因此使用ListView不足以满足我的需要。

我正在努力寻找一种在TextView侦听器中执行此操作的方法。

到目前为止,我已经尝试过:

  1. cursor-光标似乎总是在最后一行,因此如果光标有4行,无论我单击哪个项目名称,调用TextView.getString()都会返回例如3。
  2. onClickCursor c = myAdapter.getCursor(),然后是c.getPosition(),但是从这里我无法获得所单击项目的位置。 LinearLayout ll = (LinearLayout) v.getParent()返回-1。

非常感谢您的帮助。

LinearLayout ll2 = (LinearLayout) ll.getParent()

ListView lv = (ListView) ll2.getParent()

lv.getSelectedItemPosition()

template_item.xml

我的片段摘录

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/tv_item_heading"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_weight="5">
        <TextView
            android:id="@+id/tv_item_name"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="4"/>
        <TextView
            android:id="@+id/tv_item_quantity"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
    </LinearLayout>
</LinearLayout>

1 个答案:

答案 0 :(得分:0)

尝试过的方法1很好:

 Cursor cursor = myAdapter.getCursor()
 ...

使用OnItemClickListener,以便可以访问该位置:

public void onItemClick(AdapterView<?> arg0, View view, int position, long id) {
   Cursor cursor = myAdapter.getCursor();
   cursor.moveToPosition(position);
   ...
}

如果要坚持使用onClickListener,请在bindView内执行以下操作:

public void bindView(View view, Context context, Cursor cursor) {
    ...
    view.setTag(Integer.valueOf(cursor.getPosition());
}

[或在您当前关闭的任何视图(如“ tvItem”)上设置标签。但是在单个TextView上设置OnClickListener可能会使用户难以点击?]

然后在onClick方法中执行以下操作:

 public void onClick(View v) {
     Cursor cursor = myAdapter.getCursor();
     int position = (Integer) v.getTag();
     cursor.moveToPosition(position);
     ...
  }

值得一提的是,如果滚动性能成为问题,则有必要研究“ View Holder Pattern”或使用实质上与“ View Holder Pattern”一起提供的RecyclerView。