Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义ListView-单击列表中的按钮时获取项目id_Android_Android Listview - Fatal编程技术网

Android 自定义ListView-单击列表中的按钮时获取项目id

Android 自定义ListView-单击列表中的按钮时获取项目id,android,android-listview,Android,Android Listview,我有一个自定义的ListView,里面有一个按钮,当我单击这个按钮时,不会调用onItemClickListener(),而是调用按钮的onClick()方法。 我想要实现的是获取我单击的按钮所在的列表项的id(我需要这个id从数据库中删除正确的条目) 这是我的适配器: sa = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.list_mission, new String

我有一个自定义的ListView,里面有一个按钮,当我单击这个按钮时,不会调用onItemClickListener(),而是调用按钮的onClick()方法。
我想要实现的是获取我单击的按钮所在的列表项的id(我需要这个id从数据库中删除正确的条目)

这是我的适配器:

sa = new SimpleAdapter (this.getBaseContext(), listItem, R.layout.list_mission,
                        new String[] {"marque", "date"}, new int[] {R.id.list_vehicule, R.id.list_date});

谢谢大家!

您可以使用
setTag

例如:在项目\u 0中有一个按钮\u 0

getView
中:

button_0.setTag(position)
在您的
onClick中


您可以通过
v.getTag()
获得该位置。您可以使用
接口来实现这一点。按如下方式创建自定义类:

public interface MyCustomClickListener{
      public void onMyClickListener(int id){}
}
private MyCustomClickListener mMyClickListener;

public MyAdapter(Activity activity){
    try {
        mMyClickListener = (MyCustomClickListener) activity;
    } catch(ClassCastException e){
        throw new ClassCastException(activity + " must implements MyCustomClickListener");
    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent){

    Button mMyBtn = // initialise Button
    mMyBtn.setOnClickListener(new View.OnClickListener){

        @Override
        public void onClick(View view){
            mMyClickListener.onMyClickListener(position);
        }

    };
}
在自定义适配器中,您可以像这样使用此
接口

public interface MyCustomClickListener{
      public void onMyClickListener(int id){}
}
private MyCustomClickListener mMyClickListener;

public MyAdapter(Activity activity){
    try {
        mMyClickListener = (MyCustomClickListener) activity;
    } catch(ClassCastException e){
        throw new ClassCastException(activity + " must implements MyCustomClickListener");
    }
}

@Override
public View getView(int position, View convertView, ViewGroup parent){

    Button mMyBtn = // initialise Button
    mMyBtn.setOnClickListener(new View.OnClickListener){

        @Override
        public void onClick(View view){
            mMyClickListener.onMyClickListener(position);
        }

    };
}
在您的
活动中

public class MyActivity extends Activity implements MyCustomClickListener{

    @Override
    public void onMyClickListener(int id){
        // your id
    }

}

这应该是一种魅力!:)

发布您的自定义适配器。@bumblebeez通过将“假”设置为“假”来检查我的答案您将能够单击OnitemClick以及按钮单击侦听器…您所说的“在您的自定义适配器中”是什么意思?您的ListView适配器。我使用simpleadapter的唯一时刻是我在问题中发布的两行,我真的不明白我该如何使用你代码的这一部分!对不起,我对android开发非常陌生。要使用这种方法,您应该创建一个自定义适配器。以下是一些如何实现这一点的示例: