【发布时间】:2014-10-20 07:09:55
【问题描述】:
我有一个列表视图,其中包含列表中每一行的文本视图和删除图像按钮。我使用自定义适配器填充了这个列表视图并覆盖了 getView 方法。但是,我还为每个文本视图分配了 onClick 侦听器,以打开一个用于编辑文本的对话框(以及用于在列表视图中删除该行的图像按钮。)
我的问题是当用户“不小心”同时用两根手指点击两行时,它会弹出两个对话框,一个隐藏在另一个后面。用户可以简单地忽略两者,但我想通过不让它发生来避免这个故障。
这是来自 getView 的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListItem li = getItem(position);
ViewHolder viewHolder;
if(convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(R.layout.pref_sqlite_table_row, parent, false);
viewHolder.imageButton = (ImageButton) convertView.findViewById(R.id.pref_remove_button);
viewHolder.textView = (TextView) convertView.findViewById(R.id.pref_text_view);
//we need to update adapter once we finish with editing
convertView.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.imageButton.setTag(li.getId());
// imageButton onClick to remove row
viewHolder.textView.setText(li.getData());
viewHolder.textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
TextView tv = (TextView) v;
AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
View vw = ((Activity) mContext).getLayoutInflater().inflate(R.layout.pref_sqlite_table_dialog, null);
mNewChangeDialogEditText = (EditText) vw.findViewById(R.id.pref_edit_text);
mNewChangeDialogEditText.setText(tv.getText());
ImageButton ib = (ImageButton) vw.findViewById(R.id.pref_accept_button);
ib.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// update data
mNewChangeDialog.dismiss();
}
});
builder.setView(vw);
mNewChangeDialog = builder.create();
mNewChangeDialog.show();
}
});
return convertView;
}
【问题讨论】:
-
当您单击一次进入时,您可以在此处的适配器中简单地设置一个静态标志,检查它并在您关闭时重置标志。