在列表中为按钮设置onclicklistener

4
我在Android Studio中有一个项目,其中包含自定义的ListView。我的自定义ListView包含2个文本框、一个开关和一个图像按钮,但我无法找到如何在ListAdapter类中为它们设置OnClickListener或其他监听器。
以下是我的ListAdapter:
public class listadapter extends ArrayAdapter {
    Context context_;
    int resource_;
    ArrayList<reminders> objects_;
    boolean bool;
    DBAdapter db;

    public listadapter(Context context, int resource, ArrayList<reminders> objects) {
        super(context, resource, objects);
        context_ = context;
        resource_ = resource;
        objects_ = objects;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context_.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View ViewRow = inflater.inflate(R.layout.reminders_list_layout, parent, false);
        TextView nametxt, addresstxt;
        Switch sw;
        ImageView imgview;
        nametxt = (TextView) ViewRow.findViewById(R.id.remindername);
        addresstxt = (TextView) ViewRow.findViewById(R.id.reminderaddress);
        sw = (Switch) ViewRow.findViewById(R.id.remindersw);
        imgview = (ImageView) ViewRow.findViewById(R.id.imageView4);
        nametxt.setText(objects_.get(position).name);
        addresstxt.setText(objects_.get(position).address);
        bool = (objects_.get(position).swbool != 0);
        sw.setChecked(bool);
        imgview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                View parentRow = (View) v.getParent();
                ListView listView = (ListView) parentRow.getParent();
                final int position = listView.getPositionForView(parentRow);
                Toast.makeText(context_,position+"",Toast.LENGTH_LONG).show();
            }
        });
        return ViewRow;
    }

但是当我在测试我的项目并单击imageview时,它会强制关闭并在logcat中显示这个错误。
12-27 20:58:50.343 5658-5658/com.amir_p.yadambendaz E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.amir_p.yadambendaz, PID: 5658
java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to android.widget.ListView at com.amir_p.yadambendaz.listadapter$1.onClick(listadapter.java:49)

我能做些什么?
3个回答

3
尝试更改。
public View getView(int position, View convertView, ViewGroup parent) {
    ...
    @Override
    public void onClick(View v) {
        View parentRow = (View) v.getParent();
        ListView listView = (ListView) parentRow.getParent();
        ...
}

to

public View getView(int position, View convertView, final ViewGroup parent) {
    ...
    @Override
    public void onClick(View v) {
        ListView listView = (ListView) parent;
        ...
}

1
parentconvertView 视图最终要附加到的父级视图。convertView 是列表视图行,而 parent 是将包含它们的 ListView - Mohammed Aouf Zouag

1

最简单的方法是使用标签。
您可以使用以下代码。

imgview.setTag(new Integer(position);
imgview.setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View v) {            
      final int position = (Integer)v.getTag();               
      Toast.makeText(context_,position+"",Toast.LENGTH_LONG).show();
   }
});

如果您想在标签中保存其他对象,可以使用setTag(int key, Object object)来保存位置。
要获取ListView,可以使用以下代码。
ListView listview = (ListView) v.getParent() //item view 
       .getParent()  //Linear Layout in listview 
       .getParent();//ListView

0

View parentRow = (View) v.getParent(); ListView listView = (ListView) parentRow.getParent(); 你正在为ImageView编写一个监听器,并从图像中获取父级将返回ListView的一行。这里parentRow.getParent()是listView中的一行布局,你需要将其转换为ListView。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接