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);

リストビューにチェックボックスが表示されません。

チェックボックスは表示されましたが、Android携帯の連絡先からの名前は表示されませんでしR.layout.contacts_listた。android.R.layout.simple_list_item_multiple_choice

ここに私のコードがあります: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" />

ContactsList.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"
        };

は私のトーストメッセージです。

これについて本当に助けが必要です。どんな助けでも大歓迎です。例も大歓迎です。
ありがとう

4

1 に答える 1

3

次の 2 つの選択肢があります。

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 - 定義済みのチェックボックスを含む新しい行レイアウトを作成し、独自に処理します。

contact_list.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>

contact_entry.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 に答える