单击列表项与复选框时出现问题

时间:2013-08-07 20:45:46

标签: android listview checkbox

我一直在研究一种“最喜欢”列表项的方法,而且我有一个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();
            }});

    }
}

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

1 个答案:

答案 0 :(得分: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

有关类似示例,请参阅here