【问题标题】:Listview with checkboxes in alert dialog box警报对话框中带有复选框的列表视图
【发布时间】:2011-09-29 13:13:29
【问题描述】:

我在多选“确定,取消”对话框中显示联系人。我已经为在对话框中显示联系人的适配器实现了 Filterable。问题是,一旦我在使用提前类型时尝试选择(选中)联系人,则选中该特定位置的复选框而不是联系人。

初始画面是这样的

预先输入后,

当我按退格键查看原始列表时,未选中所选联系人。

这是我的活动。

Cursor c = getContentResolver().query(People.CONTENT_URI,
    PROJECTION,
    null,
    null,
    Contacts.People.DEFAULT_SORT_ORDER
);

startManagingCursor(c);
ListAdapter adapter1 = new ContactListAdapter(this, c);
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = (View) inflater.inflate(R.layout.list_view, null);
listView = (ListView) view.findViewById(R.id.contactlist);
listView.setTextFilterEnabled(true);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setAdapter(adapter1);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setOnItemSelectedListener(this);
alertDialog.setView(view);

适配器如下:

public class ContactListAdapter extends CursorAdapter implements Filterable
{
    public static final String[] PEOPLE_PROJECTION = new String[] {
        People._ID,
        People.NAME,
        People.NUMBER
    };

    public ContactListAdapter(Context context, Cursor c) {
        super(context, c);
        mContent = context.getContentResolver();
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        final LayoutInflater inflater = LayoutInflater.from(context);
        final TextView view = (TextView) inflater.inflate(
            android.R.layout.simple_list_item_multiple_choice,
            parent,
            false
        );
        view.setText(cursor.getString(1));
        return view;
    }

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        ((TextView) view).setTag(cursor.getLong(0));
        ((TextView) view).setText(cursor.getString(1));
    }

    @Override
    public String convertToString(Cursor cursor) {
        return cursor.getString(1);
    }

    @Override
    public Cursor runQueryOnBackgroundThread(CharSequence constraint) {
        if (getFilterQueryProvider() != null) {
            return getFilterQueryProvider().runQuery(constraint);
        }

        StringBuilder buffer = null;
        String[] args = null;
        if (constraint != null) {
            buffer = new StringBuilder();
            buffer.append("UPPER(");
            buffer.append(Contacts.ContactMethods.NAME);
            buffer.append(") GLOB ?");
            args = new String[] { constraint.toString().toUpperCase() + "*" };
        }

        return mContent.query(Contacts.People.CONTENT_URI,
            PEOPLE_PROJECTION,
            buffer == null ? null : buffer.toString(),
            args,
            Contacts.People.DEFAULT_SORT_ORDER
        );
    }

    private ContentResolver mContent;

}

【问题讨论】:

  • 我认为您需要添加方法来控制适配器中的复选框按钮行为...我看不到,可能是原因...

标签: android arrays listview


【解决方案1】:

“当我按退格键查看原始列表时,未选中所选联系人。”

尝试为您的 dialog.setOnCancleListener 设置

onCancel 调用 adapter.notifyDataSetChanged()

也许有帮助

【讨论】:

    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2017-09-14
    • 2022-08-10
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多