Android ListView如何禁用多点击

标签 android listview dialog

我有一个 ListView ,其中包含一个 TextView 和一个删除列表中每一行的图像按钮。我使用自定义适配器填充此 ListView 并覆盖 getView 方法。但是,我还为每个 TextView 分配了 onClick 监听器,以打开一个用于编辑文本的对话框(以及用于删除 ListView 中该行的图像按钮。)

我的问题是当用户“不小心”同时用两根手指点击两行时,会弹出两个对话框,一个隐藏在另一个对话框后面。用户可以简单地关闭两者,但我想通过根本不让它发生来避免这个故障。

这是 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;
}

最佳答案

很简单,首先不要在getView() 中创建AlertDialog 对象。在自定义适配器的构造函数中创建它。

现在只需在 getView() 中将 Textview 的值分配给 AlertDialog 的 EditText,以便根据类级别使用 AlertDialog 的 EditText 引用。

即使 ib.setOnClickListener() 也只将 AlertDialog 的所有内容放在自定义适配器的构造函数中。

现在在 ib.setOnClickListener() 中,如果使用 isVisible()isShown() 方法和 不可见,则只显示对话框>dismiss() 如果它已经可见。

(我不记得方法了)。

关于Android ListView如何禁用多点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25514625/

相关文章:

Java 对未知泛型的反射(reflection)

android - 从 iframe 加载 Chrome Android Intent

android - 关闭最近的应用程序按钮或清除列表?

android - 将 String 与多个 ListView 项目进行比较

Android - 将布局 View 添加到 ListView

javascript - 在 ckeditor 对话框选择字段中将颜色显示为选项描述

java - fragment 错误,transaction.replace()

listview - 预加载 - ListView 中的 Admob 原生广告

android - 添加输入类型时 EditText 崩溃

dialog - 当不在jQuery模式对话框中时,select2插件可以正常工作