1

一段时间以来,我一直在研究一种“收藏”列表项目的方法,并且我有一个ListView复选框,所有内容都可以正确显示。

我的问题是我需要该复选框可单击并将列表项设置为选中,并且我应该能够单独单击列表项以启动新活动。

目前,单击复选框会按应有的方式更改图标,但不会将其设置为选中状态,而单击列表项会将项目设置为选中状态。

在当前的代码中,我没有包含在项目点击时启动新活动的意图;我现在只想在单击复选框时“选中”该项目。

AndroidListViewActivity.java:

package com.androidlistview;

import android.app.Activity;
import android.os.Bundle;
import android.util.SparseBooleanArray;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;

public class AndroidListViewActivity extends Activity {

    ListView myList;
    Button getChoice;

    String[] listContent = {
            "January",
            "February",
            "March",
            "April",
            "May",
            "June",
            "July",
            "August",
            "September",
            "October",
            "November",
            "December"
    };

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myList = (ListView)findViewById(R.id.list);
        getChoice = (Button)findViewById(R.id.getchoice);

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.single_item, listContent);

        myList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        myList.setAdapter(adapter);

        getChoice.setOnClickListener(new Button.OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                String selected = "";

                int cntChoice = myList.getCount();
                SparseBooleanArray sparseBooleanArray = myList.getCheckedItemPositions();
                for(int i = 0; i < cntChoice; i++){
                    if(sparseBooleanArray.get(i)) {
                        selected += myList.getItemAtPosition(i).toString() + "\n";

                    }
                }

                Toast.makeText(AndroidListViewActivity.this, 
                        selected, 
                        Toast.LENGTH_LONG).show();
            }});

    }
}

主.xml:

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

<Button
    android:id="@+id/getchoice"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Get Choice" />

<ListView 
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal" >

        <CheckBox
            android:id="@+id/check_favourites"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:focusable="false" />

        <TextView
            android:id="@+id/single_item"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="#ffffff"
            android:padding="8dp"
            android:textColor="#000000"
            android:textSize="20sp"
            android:layout_gravity="right" />

</LinearLayout>
4

1 回答 1

0

你的问题是你宣布你的方式ArrayAdapter

而不是这样做:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    R.layout.list_item, R.id.single_item, listContent);

用这个:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_multiple_choice, listContent);

编辑:

对于自定义适配器行为,您必须制作自己的Adapter.

然后,您可以添加onCheckedChangedListener复选框并onClickListener单击项目。

有关类似示例,请参见此处

于 2013-08-07T21:36:54.743 回答