1

我在 ListView 中设置多项选择时遇到问题。我的 ListView 有从 android 手机中检索到的联系人姓名。

我已经按照设置多项选择的示例进行操作,但没有成功。

我试过打字

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contacts_list, c, columns, views);
        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        this.setListAdapter(adapter);

但我没有在 ListView 中看到复选框。

我已经替换R.layout.contacts_listandroid.R.layout.simple_list_item_multiple_choice它显示了复选框,但没有来自 android 手机联系人的姓名。

这是我的代码:contacts_list.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@color/light_goldenrod"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:stackFromBottom="false"
        android:transcriptMode="normal"
        android:choiceMode="multipleChoice" >
    </ListView>

    <TextView
        android:textColor="@color/dark_purple"
        android:id="@+id/contactName"
        android:textStyle="bold"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

联系人列表.java

public class ContactsList extends ListActivity
{
    final Context context = this;

    Cursor cursor;

    String[] buddiesList = 
        {"Kanak Priya",
        "Joanne Liew",
        "Michelle Lam",
        "Teo Kin Hua",
        "Melissa Haiting",
        "David Yeo",
        "Natasha Akhbar",
        "Gillian Gan",
        "Sonia",
        "Ms Long",
        "Joan Tang",
        "Stephanie",
        "Nur Ashiqin"
        };

    BuddyDBAdapter buddyDB = new BuddyDBAdapter(this);

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.contacts_list);

        ListView list = getListView();



        setListAdapter(new ArrayAdapter<String> (this, R.layout.contacts_list, R.id.contactName, buddiesList));

        Uri allContacts = Uri.parse("content://contacts/people");

        Cursor c = managedQuery(allContacts, null, null, null, null);

        String[] columns = new String[] {ContactsContract.Contacts.DISPLAY_NAME};
        int[] views = new int[]  {R.id.contactName};

        startManagingCursor(c);

        SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.contacts_list, c, columns, views);
        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        this.setListAdapter(adapter);


        /*if(cursor.getCount()<0)
        {
            Intent displayIntent = new Intent(Intent.ACTION_VIEW);
            displayIntent.setData(Uri.parse("content://contacts/people"));
            startActivity(displayIntent);

            displayIntent = new Intent(Intent.ACTION_VIEW);
            //displayIntent.setData(Uri.parse("content://contacts/people/"+id));
            startActivity(displayIntent);
        }
        else
        {
            final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
            alertDialog.setTitle("ALERT!");
            alertDialog.setMessage("NO Name is Found! D:");
            alertDialog.setIcon(R.drawable.warning);
            alertDialog.setButton("OK", new DialogInterface.OnClickListener()
            {
                public void onClick(DialogInterface dialog, int which)
                {
                    Intent backIntent = new Intent(context, ContactsList.class);
                    startActivity(backIntent);
                }
            });
            alertDialog.show();
        }*/
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id)
    {
        buddyDB.open();
        long name_id;
        super.onListItemClick(l, v, position, id);


        Cursor c = ((SimpleCursorAdapter)l.getAdapter()).getCursor();

        TextView contactName = (TextView) v.findViewById(R.id.contactName);
        String NameValue = contactName.getText().toString();

        name_id = buddyDB.insertNames(NameValue);


        Toast.makeText(getBaseContext(),
                "Selected: " + buddiesList[position], Toast.LENGTH_SHORT).show();


        buddyDB.close();

哦,顺便说一句,

String[] buddiesList = 
        {"Kanak Priya",
        "Joanne Liew",
        "Michelle Lam",
        "Teo Kin Hua",
        "Melissa Haiting",
        "David Yeo",
        "Natasha Akhbar",
        "Gillian Gan",
        "Sonia",
        "Ms Long",
        "Joan Tang",
        "Stephanie",
        "Nur Ashiqin"
        };

用于我的 Toast 消息。

我真的需要帮助。任何帮助将不胜感激。示例也将不胜感激。
谢谢

4

1 回答 1

3

您可能有两种选择:

1 - 使用 Android 资源的默认布局 (simple_list_item_multiple_choice)

您可以替换此代码:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.contacts_list, c, columns, views);

到:

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_multiple_choice, c, columns, new int {android.R.id.text1});

2 - 创建包含您定义的复选框的新行布局并自行处理。

联系人列表.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@color/light_goldenrod"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:stackFromBottom="false"
        android:transcriptMode="normal"
        android:choiceMode="multipleChoice" >
    </ListView>
</LinearLayout>

联系人入口.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content">
    <TextView
        android:textColor="@color/dark_purple"
        android:id="@+id/contactName"
        android:textStyle="bold"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <CheckBox
        android:id="@+id/contactCheckbox"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        android:checked="false" />

</LinearLayout>

像这样添加自定义光标适配器:

public class YourCursorAdapter extends CursorAdapter  {

private Context mContext;
private Cursor mCurser;

public YourCursorAdapter(Context context, int layout, Cursor c, String[] from,
        int[] to, ContentResolver co) {
    super(context, c);
    mCurser = c;
    mContext = context;
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    // TODO Auto-generated method stub
    LayoutInflater inflater = LayoutInflater.from(mContext);
    View v = inflater.inflate(R.layout.contact_entry, parent, false);
    bindView(v, mContext, cursor);
    return v;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {

    TextView contactName= (TextView)view.findViewById(R.id.contactName);
    contactName.setText(cursor.getString((mCurser
            .getColumnIndexOrThrow(Contacts.Phones.DISPLAY_NAME))));
    CheckBox contactCheckbox = (TextView)view.findViewById(R.id.contactCheckbox);
    contactCheckbox.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Checkbox checkBox = (Checkbox) v.findViewById(R.id.contactCheckbox)
            if (checkBox.isChecked())
                    checkBox.setChecked(false);
            else
                    checkBox.setChecked(true);
        }
    });
}

在您的 ListActivity 中:

    YourCursorAdapter adapter = new YourCursorAdapter(this,
            null, c, null, null,null);
    this.setListAdapter(adapter);
于 2012-09-10T02:01:20.097 回答