我在左侧有一个带有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;
}
提前致谢
答案 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();
}
}