2015-09-07 127 views
0

我已閱讀其他主題,但仍有問題。 setOnItemClickListener應該在像下面的Adapter類中或在「MainActivity」類中?
如果是在Adapter類中它不能對佈局做正確的引用。
錯誤的logcat:
CursorAdapter和OnItemClickListener

Attempt to invoke virtual method 'void  
android.widget.ListView.setOnItemClickListener(android.widget.AdapterView$OnItemClickListener)' on a null object reference 

ListAdapter.java

public class ListAdapter extends CursorAdapter { 
public ListAdapter(Context context, Cursor cursor, int flags) { 
    super(context, cursor, 0); 
} 
@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    final LayoutInflater inflater = LayoutInflater.from(context); 
    return LayoutInflater.from(context).inflate(R.layout.items, parent, false); 
} 

@Override 
public void bindView(View view, Context context, final Cursor cursor) { 
    // Find fields to populate in inflated template 
    TextView txt1 = (TextView) view.findViewById(R.id.TitleLabel); 
    TextView txt2 = (TextView) view.findViewById(R.id.SecondLabel); 
    TextView txt3 = (TextView) view.findViewById(R.id.ThirdLabel); 
    // Extract properties from cursor 
    String name = cursor.getString(1); 


    txt1.setText(name); 

    ListView listview = (ListView) v.findViewById(R.id.listView); 
    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, final View view, 
           final int position, final long id) { 
      final String itemId = cursor.getString(cursor.getColumnIndex("_id")); 
      Log.i("Activity", "Cursor: " + cursor + " + " + position + " + id " + id + " ITEMID: " + itemId); 
      // final String item = (String) parent.getItemAtPosition(position); 
      view.animate().setDuration(500).alpha(0) 
        .withEndAction(new Runnable() { 
         @Override 
         public void run() { 
          // it was for SimpleCursorAdapter 
          listview.remove(item); 
          helper.deleteitem(id+1); 
          helper.deleteItemByName(item); 
          adapter.notifyDataSetChanged(); 
          view.setAlpha(1); 

         } 
        });*/ 
     } 

    }); 
} 
} 
+1

爲什麼你有一個ListView作爲該項目的一部分? 'listview.setOnItemClickListener'應該在你的活動 – Blackbelt

+0

裏面Activity類我不能參考光標 – test

+0

當然你可以,你爲什麼認爲你不能? – Blackbelt

回答

0

嘗試有setOnItemClickListener在oyur MainActivity,但如果你希望在你的適配器類中使用,然後使用父的setOnclickListener方法lauout的 R.layout.items

因爲在bindView中,每個項目都被視爲單個項目。

編輯

中相對佈局

android:id="@+id/myRelativelayout" 

添加ID在Adatpter類

RelativeLayout rl =(RelativeLayout) view.findViewById(R.id.myRelativelayout); 

實施r1.setOnClickListener並添加您的代碼。

+0

在活動中:'無法解析遊標'in:cursor.getString(cursor.getColumnIndex(「id」)); – test

+0

如果您遇到其他問題,請在Adapter類中使用onClick(適用於父級佈局)。 –

+0

如果你沒有得到郵政編碼R.layout.items –

0

items.xml佈局

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:paddingLeft="16dp" 
    android:paddingRight="16dp" 
    android:paddingTop="5dp" 
    android:paddingBottom="5dp" 
    > 

    <ImageView 
     android:id="@+id/postThumb" 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:src="@drawable/ic_launcher" 
     android:scaleType="centerCrop" 
     android:layout_marginRight="5dp"/> 

    <TextView 
     android:id="@+id/TitleLabel" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignTop="@id/postThumb" 
     android:layout_toRightOf="@id/postThumb" 
     android:maxLines="1" 
     android:text="Lorem Ipsum 1 line" 
     android:textIsSelectable="false" 
     android:textSize="16sp" 
     android:ellipsize="end"/> 

    <TextView 
     android:id="@+id/SecondLabel" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:maxLines="1" 
     android:textSize="12dp" 
     android:layout_centerVertical="true" 
     android:layout_toRightOf="@+id/postThumb" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 

    <TextView 
     android:id="@+id/ThirdLabel" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_alignBottom="@id/postThumb" 
     android:layout_toRightOf="@id/postThumb" 
     android:maxLines="1" 
     android:textSize="11dp" 
     /> 
</RelativeLayout>