Android:为ListView中的每个项添加事件侦听器

jay*_*jay 3 android event-handling android-layout

我有一个带有ListView的Android应用程序,列表中的每一行都有一个TextView和一个Button.我想要做的是为ListView中的每个Button添加一个OnClickListener,但我无法弄清楚如何获得对每个Button的某种引用......任何人都可以给我一个提示吗?

这是我绑定到ListAdapter的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView 
    android:id="@+id/row_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:textSize="18sp">
</TextView>
<Button
    android:id="@+id/row_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我试过这样的东西,但它不起作用:

SimpleCursorAdapter rows = new SimpleCursorAdapter(this, R.layout.row_layout, cursor, from, to);
setListAdapter(rows);
Button button = (Button) getListAdapter().getView(0, null, getListAdapter()).findViewById(R.id.row_button);
button.setOnClickListener(new View.OnClickListener() {
    @Override public void onClick(View v) {
        Log.i(TAG, "clicked");
    }
}); 
Run Code Online (Sandbox Code Playgroud)

Cri*_*ian 11

使用它是不可能的SimpleCursorAdapter......你必须创建自己的适配器.如果您不想编写自定义适配器,至少尝试使用新功能增强SimpleCursorAdapter.例如:

public class YourAdapter extends SimpleCursorAdapter{

    public YourAdapter(Context context, int layout, Cursor c, String[] from, int[] to) {
        super(context, layout, c, from, to);
    }

    public View getView(int position, View convertView, ViewGroup parent){
        View view = super.getView(position, convertView, parent);
        Button button = (Button)view.findViewById(R.id.row_button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override public void onClick(View v) {
                Log.i(TAG, "clicked");
            }
        }); 
        return view;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,你可以这样做:

SimpleCursorAdapter rows = new YourAdapter(this, R.layout.row_layout, cursor, from, to);
setListAdapter(rows);
Run Code Online (Sandbox Code Playgroud)