如何在列表视图中选择仅按ImageView的行

时间:2016-06-21 12:15:50

标签: android listview

我在左侧有一个带有imageview的listView。我想做的是;如果按下imageView选择当前行,如果再次按下,则取消选择该行。使用我当前的代码,当我单击imageView但未选中当前行时,我可以使用performLongClick()选择一行。似乎是随机的。

public View getView(int position, View convertView, ViewGroup parent) {
        final HmViewHolder holder;
        row = convertView;


        if (row == null) {
            row = inflater.inflate(R.layout.list_item, parent, false);
            holder = new HmViewHolder();
            holder.title = (TextView) row.findViewById(R.id.title);
            holder.contact = (ImageView) row.findViewById(R.id.imageview);

            row.setTag(holder);
        } else {
            holder = (HmViewHolder) row.getTag();
        }

        holder.contact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (multiMode) {
                    row.getTag();
                    row.setSelected(!row.isSelected());
                holder.contact.setImageResource(R.drawable.ic_check_circle_black);
                } else {
                    row.performLongClick();
                    holder.contact.setImageResource(R.drawable.ic_contact);
                }
            }
        });
    return row;
    }

提前致谢

4 个答案:

答案 0 :(得分:0)

  

ListView自我clikcable并在另一个内部使用可点击的内容   可点击不好。因此,最好不要在项目上设置clicklistener   列表视图中的(ImageView和TextView)因为如果你喜欢的话   那,它会混淆环境而无法做到   了解您想要点击的内容。所以只使用onclick   列表视图。

答案 1 :(得分:0)

关于此主题有Chris Banes's blogpost

给它一个阅读,我认为你所有的麻烦都解决了。在我看来,这是创建可检查列表的麻烦方式。

答案 2 :(得分:0)

将您的ImageView设置为可行的布局xml上的可点击。

upstream _bottle {
     server unix:/run/uwsgi.myapp.sock;
}
server {

    listen [my.server.ip.address]:80;
    charset utf-8;
    root /var/www/myapp;
    server_name linkaso;

location / {
    include uwsgi_params;
    uwsgi_pass unix:/run/uwsgi.myapp.sock;
    uwsgi_param UWSGI_CHIDIR /var/www/myapp;
    uwsgi_param UWSGI_SCRIPT index;
    }
}

答案 3 :(得分:0)

//ViewHolder Class

   class ViewHolder {
            TextView tv_details;
            RelativeLayout rl_expense_list;
            ImageView Iv_close;
        }

// `here is getView Method`
public View getView(final int position, View convertView, ViewGroup parent) 
{           final ViewHolder viewHolder;

            if (convertView == null) {
                viewHolder = new ViewHolder();
                LayoutInflater inflater= (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.expenses_list_row, parent, false);

                viewHolder.rl_expense_list = (RelativeLayout) convertView.findViewById(id.rl_expense_list);
                viewHolder.tv_details = (TextView) convertView.findViewById(id.tv_details);
                viewHolder.bt_close = (ImageView) convertView.findViewById(id.iv_close);

                convertView.setTag(viewHolder);
            }
            else {
                viewHolder = (ViewHolder) convertView.getTag();
            }
            viewHolder.Iv_close.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    final AlertDialog alertDialog = new AlertDialog.Builder(ExpensesList.this).create();
                    alertDialog.setTitle("Expense List");
                    alertDialog.setMessage("Do You Want To Delete This Expense List?");
                    alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Yes", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            expensesDataModels.remove(position);
                            Customer_Feedback.expensesDataModels = expensesDataModels;
                            notifyDataSetChanged();
                        }
                    });
                    alertDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "No", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            alertDialog.dismiss();
                        }
                    });
                    alertDialog.show();
                }
            }