【问题标题】:how to get DB id only after clicking imageButton in listView item with kotlin如何仅在使用 kotlin 在 listView 项中单击 imageButton 后获取 DB id
【发布时间】:2017-12-08 14:23:39
【问题描述】:

我有一个 customAdapter 类和一个 listView。我用 3 个文本视图和一个图像按钮制作了单行布局。 现在我的问题是我如何才能获得 DB id 字段,仅通过单击 imageButton 并忽略对整行的单击? 我知道我可以通过以下方式获取 ID:

mListView.onItemClickListener = AdapterView.OnItemClickListener { adapterView, view, position, id ->
               view.delete.setOnClickListener(){
                   Toast.makeText(context,""+id,Toast.LENGTH_SHORT).show()
              }

但这只有在我单击整行时才有效。 我在 xml 的根目录中尝试了android:descendantFocusability="blocksDescendants",在 imageButton 节点中尝试了android:focusable="false",并且在识别整行时无论如何都无法识别 imageButton。只有当我使用button.onClickListener()... 点击被识别。但那样我不知道如何获取 id。

我的适配器类代码:

class MyAdapter(activity: Activity, context: Context, cursor: Cursor) : CursorAdapter(context, cursor, true) {

    var inflater: LayoutInflater
    lateinit var mListView: ListView

    init {
        this.inflater = LayoutInflater.from(context)
        mListView = activity.listView
    }

    override fun newView(context: Context?, cursor: Cursor?, parent: ViewGroup?): View {
        val view = LayoutInflater.from(context).inflate(R.layout.single_row, parent, false)

        return view;
    }
override fun bindView(view: View, context: Context, cursor: Cursor) {
        val latitude = view.findViewById(R.id.latitude) as TextView
        val longtitude = view.findViewById(R.id.longtitude) as TextView
        val date = view.findViewById(R.id.date) as TextView
        val asu = view.findViewById(R.id.asu) as TextView

        latitude.setText(cursor.getString(cursor.getColumnIndex(Constants.Signal.LATITUDE)))
        longtitude.setText(cursor.getString(cursor.getColumnIndex(Constants.Signal.LONGTITUDE)))
        date.setText(cursor.getString(cursor.getColumnIndex(Constants.Signal.DATE)))
        asu.setText(cursor.getString(cursor.getColumnIndex(Constants.Signal.ASU)))

    }
}

我的单行布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:id="@+id/list_item"
    android:layout_height="match_parent"
    android:descendantFocusability="blocksDescendants">


    <TextView
        android:id="@+id/latitude"
        android:layout_width="23dp"
        android:layout_height="53dp"
        android:layout_weight="0.20"
        android:text="latitude"
        android:gravity="center" />

    <TextView
        android:id="@+id/longtitude"
        android:layout_width="23dp"
        android:layout_height="53dp"
        android:layout_weight="0.20"
        android:text="longtitude"
        android:gravity="center" />

    <TextView
        android:id="@+id/date"
        android:layout_width="23dp"
        android:layout_height="53dp"
        android:layout_weight="0.20"
        android:gravity="center"
        android:text="date" />

    <TextView
        android:id="@+id/asu"
        android:layout_width="23dp"
        android:layout_height="53dp"
        android:layout_weight="0.20"
        android:gravity="center"
        android:focusable="false"
        android:text="asu"/>

    <ImageButton
        android:id="@+id/delete"
        android:layout_width="0.23dp"
        android:layout_height="53dp"
        android:layout_weight="0.20"
        android:focusable="false"
        android:src="@android:drawable/ic_menu_delete" />
</LinearLayout>

【问题讨论】:

    标签: android sqlite listview kotlin


    【解决方案1】:

    您正在使用光标适配器,您应该使用 ArrayAdapter。 Here is why custom-cursoradapter-and-why-not-useexample of ArrayAdapter

    【讨论】:

      猜你喜欢
      • 2022-12-06
      • 1970-01-01
      • 2019-02-17
      • 2023-03-21
      • 1970-01-01
      • 2012-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多