Android 如何调用驻留在listview项中的按钮的onclick侦听器

Android 如何调用驻留在listview项中的按钮的onclick侦听器,android,listview,button,onclicklistener,Android,Listview,Button,Onclicklistener,我想在listview上单击一个按钮,但问题是单击后,目前无法识别侦听器调用,无论它是listview还是按钮 提前感谢……:) 您需要在列表适配器的getView()函数中添加按钮.setOnClickListener()。您需要在getView()中添加按钮.setOnClickListener()列表适配器的功能。如果不想处理整个列表项上的单击,请不要在listview上设置侦听器。您可以为列表项上的单个视图设置侦听器,如下例所示: public class MyArrayAdapter

我想在listview上单击一个按钮,但问题是单击后,目前无法识别侦听器调用,无论它是listview还是按钮


提前感谢……:)

您需要在列表适配器的
getView()
函数中添加
按钮.setOnClickListener()

您需要在
getView()中添加
按钮.setOnClickListener()
列表适配器的功能。

如果不想处理整个列表项上的单击,请不要在listview上设置侦听器。您可以为列表项上的单个视图设置侦听器,如下例所示:

public class MyArrayAdapter extends ArrayAdapter<Map<String, String>> {

    private Context mContext;

    public MyArrayAdapter(Context context, int textViewResourceId,
            List<Map<String, String>> objects) {
        super(context, textViewResourceId, objects);
        mContext = context;
    }

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

        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.list_row, null, false);
        }

        final Map<String, String> data = (Map<String, String>) getItem(position);

        ImageView imageView = (ImageView) convertView
                .findViewById(R.id.imageView);
        imageView.setImageResource(Integer.parseInt(data.get("image")));

        TextView textView = (TextView) convertView
                .findViewById(R.id.textViewTitle);
        textView.setText(data.get("name"));

        Button button = (Button) convertView
                .findViewById(R.id.buttonShow);

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mContext.startActivity(new Intent(mContext,
                            DetailActivity.class).putExtra(EXTRA_IMAGE_URL,
                            data.get("url")));
            }
        });

        return convertView;
    }

}
公共类MyArrayAdapter扩展了ArrayAdapter{
私有上下文;
公共MyArrayAdapter(上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
mContext=上下文;
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=LayoutFlater.from(getContext())。充气(
R.layout.list_行,null,false);
}
最终地图数据=(地图)获取项目(位置);
ImageView ImageView=(ImageView)convertView
.findviewbyd(R.id.imageView);
setImageResource(Integer.parseInt(data.get(“image”));
TextView TextView=(TextView)convertView
.findViewById(R.id.textViewTitle);
setText(data.get(“name”));
按钮按钮=(按钮)转换视图
.findViewById(R.id.buttonShow);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mContext.startActivity(新意图)(mContext,
DetailActivity.class).putExtra(额外图像URL,
data.get(“url”);
}
});
返回视图;
}
}

如果您不想处理整个列表项上的单击,请不要在listview上设置侦听器。您可以为列表项上的单个视图设置侦听器,如下例所示:

public class MyArrayAdapter extends ArrayAdapter<Map<String, String>> {

    private Context mContext;

    public MyArrayAdapter(Context context, int textViewResourceId,
            List<Map<String, String>> objects) {
        super(context, textViewResourceId, objects);
        mContext = context;
    }

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

        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(
                    R.layout.list_row, null, false);
        }

        final Map<String, String> data = (Map<String, String>) getItem(position);

        ImageView imageView = (ImageView) convertView
                .findViewById(R.id.imageView);
        imageView.setImageResource(Integer.parseInt(data.get("image")));

        TextView textView = (TextView) convertView
                .findViewById(R.id.textViewTitle);
        textView.setText(data.get("name"));

        Button button = (Button) convertView
                .findViewById(R.id.buttonShow);

        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                mContext.startActivity(new Intent(mContext,
                            DetailActivity.class).putExtra(EXTRA_IMAGE_URL,
                            data.get("url")));
            }
        });

        return convertView;
    }

}
公共类MyArrayAdapter扩展了ArrayAdapter{
私有上下文;
公共MyArrayAdapter(上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
mContext=上下文;
}
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
if(convertView==null){
convertView=LayoutFlater.from(getContext())。充气(
R.layout.list_行,null,false);
}
最终地图数据=(地图)获取项目(位置);
ImageView ImageView=(ImageView)convertView
.findviewbyd(R.id.imageView);
setImageResource(Integer.parseInt(data.get(“image”));
TextView TextView=(TextView)convertView
.findViewById(R.id.textViewTitle);
setText(data.get(“name”));
按钮按钮=(按钮)转换视图
.findViewById(R.id.buttonShow);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
mContext.startActivity(新意图)(mContext,
DetailActivity.class).putExtra(额外图像URL,
data.get(“url”);
}
});
返回视图;
}
}

首先,您需要创建自定义适配器扩展ArrayAdapter或BaseAdapter,他拥有getView方法。在该方法中,您可以将OnlickListener设置为按钮

链接示例创建自定义适配器:


首先,您需要创建自定义适配器扩展ArrayAdapter或BaseAdapter,他拥有getView方法。在该方法中,您可以将OnlickListener设置为按钮

链接示例创建自定义适配器:


我已经试过了,但问题是getview()中没有识别StartActivityfunction@SajadBinNazir将上下文传递给自定义适配器并使用该上下文调用startActivity
startActivity()
可能无法编译,但
YourActivity。this.startActivity()
mContext.startActivity()
(如果您使用@Homam的答案)将正常工作。我已经尝试过了,但问题是在getview()中无法识别StartActivityfunction@SajadBinNazir将上下文传递给自定义适配器,并使用该上下文调用startActivity
startActivity()
可能无法编译,但
YourActivity。this.startActivity()
mContext.startActivity()
(如果您使用@Homam的答案)将正常工作。将代码与logcat
getView()一起发布将有帮助。将代码与logcat
getView()一起发布将有帮助。发布它