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