【问题标题】:how to get the item in listview when i use onItemClickListener当我使用 onItemClickListener 时如何在列表视图中获取项目
【发布时间】:2013-05-05 11:37:20
【问题描述】:

我想从列表视图中获取项目。但是当我尝试单击 listview 时出现错误。 有人能帮我吗?

这是我的课堂活动。

data = new dbHelper(this);

    listKeluar = (ListView)findViewById(R.id.listKeluar);

    String [] keluar = { data.k_nama, data.m_chiperteks, data.kel_waktu };
    int[] k = { R.id.tNama, R.id.tChiper, R.id.tWaktu };
    cursor = data.DataPesanKeluar();
    SimpleCursorAdapter keluarAdapter = new SimpleCursorAdapter( this, R.layout.baris_keluar, cursor, keluar, k ); //this line my error
    listKeluar.setAdapter(keluarAdapter);
    listKeluar.setOnItemClickListener( new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {

            if(cursor.moveToPosition(arg2)) {
                idkeluar = cursor.getString(cursor.getColumnIndex(data.kel_id));//my line error, if i delete this line my listview didn't respon when i click
                nama = cursor.getString(cursor.getColumnIndex(data.k_nama));
                chiperteks = cursor.getString(cursor.getColumnIndex(data.m_chiperteks));
                waktu = cursor.getString(cursor.getColumnIndex(data.kel_waktu));
            }

            Intent isiPesanKeluar = new Intent();
            isiPesanKeluar.setClass(KotakKeluar.this, IsiPesanKeluar.class);
            isiPesanKeluar.putExtra("idkeluar", idkeluar);
            isiPesanKeluar.putExtra("nama", nama);
            isiPesanKeluar.putExtra("chiperteks", chiperteks);
            isiPesanKeluar.putExtra("waktu", waktu);

这是我的日志猫

Java.lang.IllegalStateException: get field slot from row 0 col -1 failed

我的方法

public Cursor DataPesanKeluar() {
    Cursor c = dba.rawQuery(
            " SELECT "
            + kel_id + " AS _id,"
            + e_chiperteks + ","
            + k_nama + ","
            + kel_waktu +
            " FROM " + tbPesan + " INNER JOIN " + tbPesanKeluar +
            " ON "  + tbPesan + "." + p_idpesan + "=" + tbPesanKeluar + "." + kel_idpesan +
            " INNER JOIN " + tbEnkrip +
            " ON " + tbPesan + "." + p_idenkrip + "=" + tbEnkrip + "." + e_idenkrip +
            " INNER JOIN " + tbKontak + 
            " ON " + tbPesan + "." + p_idkontak + "=" + tbKontak + "." + k_id , null);
    return c;
}

我的 baris_keluar.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
    android:id="@+id/tNama"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/tChiper"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/tWaktu"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

谢谢你帮助我.. 问候..

【问题讨论】:

    标签: android sqlite android-listview cursor


    【解决方案1】:

    代替

    Cursor listCursor = (Cursor) arg0.getItemAtPosition(arg2);
            if(listCursor.moveToFirst())  
    

    使用

    @Override
        public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
                if(cursor.moveToPosition(arg2)) {
                idkeluar = cursor.getString(cursor.getColumnIndex("_id"));
                nama = cursor.getString(cursor.getColumnIndex(data.k_nama));
                chiperteks = cursor.getString(cursor.getColumnIndex(data.m_chiperteks));
                waktu = cursor.getString(cursor.getColumnIndex(data.kel_waktu));
            }
    

    【讨论】:

    • 我尝试了你的代码,但我得到了同样的错误,你能帮帮我吗:(我真的需要解决方案..
    • 您是否将所有 listCursor 更改为光标?
    • 发布 DataPesanKeluar() 方法
    • 我试过了,但是当我点击列表时我的列表视图没有响应:(
    • 所以现在没有更多错误但列表在点击时没有响应?
    【解决方案2】:

    要在位置检索项目,使用CursorAdapter,您可以简单地调用Adapter.getItemAtPosition(position),将返回对象转换为Cursor。之后,您无需再次移动它。返回的值就是你点击的:

    @Override
    public void onItemClick(AdapterView arg0, View arg1, int arg2, long arg3) {
         Cursor tmpCursor = arg0.getItemAtPosition(arg2);
         // use the cursor to retrieve the content of the columns
    }
    

    【讨论】:

      【解决方案3】:
          eventlist.setOnItemClickListener(new OnItemClickListener() {
      
              @Override
              public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {
                  TextView eventname = (TextView) v.findViewById(android.R.id.text1);
                  Toast.makeText(v.getContext(),"eventname is" + eventname.getText().toString(),Toast.LENGTH_LONG).show();
              }
          });
      

      【讨论】:

        猜你喜欢
        • 2011-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多