Android CheckedTextView不切换
我有一个已选中TextView的自定义listview。当我单击项目时,它不会切换对象的选中状态并反映在ui中 dialog_categories.xmlAndroid CheckedTextView不切换,android,android-listview,android-dialogfragment,checkedtextview,Android,Android Listview,Android Dialogfragment,Checkedtextview,我有一个已选中TextView的自定义listview。当我单击项目时,它不会切换对象的选中状态并反映在ui中 dialog_categories.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/parentPanel" android:layou
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/parentPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="8dip"
android:layout_marginStart="8dip"
android:background="@color/primary_white"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/title_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="16dip"
android:layout_marginStart="16dip"
android:gravity="center_vertical|start"
android:orientation="horizontal"
android:paddingTop="5dp" >
<TextView
android:id="@+id/textView1"
style="?android:attr/textAppearanceLarge"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
android:text="@string/dialog_category_title"
android:textColor="@color/primary_color"
android:textSize="22sp" />
<TextView
android:id="@+id/all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_category_checkbox"
android:textColor="@color/primary_color" />
<CheckBox
android:id="@+id/checkBoxAll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="6dp" />
</LinearLayout>
<View
android:id="@+id/titleDivider"
android:layout_width="match_parent"
android:layout_height="2dip"
android:background="@color/black" />
<LinearLayout
android:id="@+id/contentPanel"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:minHeight="64dp"
android:orientation="vertical" >
<ListView
android:id="@+id/listViewDialog"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
<LinearLayout
android:id="@+id/buttonPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<Button
android:id="@+id/button_category_ok"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/dialog_category_btn_ok"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
对话框\u列表\u项目\u category.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<CheckedTextView
android:id="@+id/categories_checkbox"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:checkMark="?android:attr/listChoiceIndicatorMultiple"
android:gravity="center_vertical"
android:onClick="toggle"
android:text="sss" />
</RelativeLayout>
CategoriesDialogFragment.java
public class CategoriesDialogFragment extends SherlockDialogFragment {
CheckBox checkAll;
ListView categoriesListView;
CategoriesListAdapter adapter;
static Category category;
String[] categories = new String[] { "Hill Station", "Beach", "Historic",
"Wild Life", "Waterfall", "River", "Archeology" };
String[] categories_state = new String[] { "1", "0", "1", "1", "1", "1",
"0" };
public static CategoriesDialogFragment newInstance() {
CategoriesDialogFragment frag = new CategoriesDialogFragment();
Bundle args = new Bundle();
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Dialog dialog = new Dialog(MainActivity.context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_categories);
categoriesListView = (ListView) dialog
.findViewById(R.id.listViewDialog);
List<Category> theCategories = new ArrayList<Category>();
for (int i = 0; i < categories.length; i++) {
Category pl = new Category(categories[i], false);
theCategories.add(pl);
}
categoriesListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
adapter = new CategoriesListAdapter(MainActivity.context,
R.layout.dialog_list_item_category, theCategories);
categoriesListView.setAdapter(adapter);
checkAll = (CheckBox) dialog.findViewById(R.id.checkBoxAll);
checkAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Toast.makeText(MainActivity.context, "Check",
Toast.LENGTH_SHORT).show();
if (isChecked) {
for (int i = 0; i < adapter.getCount(); i++) {
category = adapter.getItem(i);
category.setChecked(true);
}
adapter.notifyDataSetChanged();
} else {
for (int i = 0; i < adapter.getCount(); i++) {
category = adapter.getItem(i);
category.setChecked(false);
}
adapter.notifyDataSetChanged();
}
}
});
return dialog;
}
private static class CategoriesListAdapter extends ArrayAdapter<Category> {
public Context mContext;
List<Category> mCategories;
public CategoriesListAdapter(Context context, int resource,
List<Category> categories) {
super(context, resource, categories);
// TODO Auto-generated constructor stub
this.mCategories = categories;
this.mContext = context;
}
public int getCount() {
return mCategories.size();
}
@Override
public Category getItem(int position) {
// TODO Auto-generated method stub
return mCategories.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
LayoutInflater viewInflater;
viewInflater = LayoutInflater.from(getContext());
convertView = viewInflater.inflate(
R.layout.dialog_list_item_category, null);
holder = new ViewHolder();
holder.categoryName = (CheckedTextView) convertView
.findViewById(R.id.categories_checkbox);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.categoryName.setText(mCategories.get(position)
.getCategoryName());
return convertView;
}
static class ViewHolder {
CheckedTextView categoryName;
}
}
}
公共类CategoriesDialogFragment扩展了SherlockDialogFragment{
复选框checkAll;
ListView分类ListView;
分类列表适配器;
静态范畴;
字符串[]类别=新字符串[]{“山站”、“海滩”、“历史”,
“野生动物”、“瀑布”、“河流”、“考古学”};
String[]categories_state=新字符串[]{“1”、“0”、“1”、“1”、“1”、“1”,
"0" };
公共静态分类DialogFragment newInstance(){
CategoriesDialogFragment frag=新建CategoriesDialogFragment();
Bundle args=新Bundle();
frag.setArguments(args);
返回碎片;
}
@凌驾
创建对话框上的公共对话框(Bundle savedInstanceState){
最终对话框=新对话框(MainActivity.context);
对话框.requestWindowFeature(窗口.FEATURE\u无\u标题);
对话框.setContentView(R.layout.dialog\u类别);
categoriesListView=(ListView)对话框
.findViewById(R.id.listViewDialog);
列出类别=新建ArrayList();
对于(int i=0;i
您是否使用了正确的xml?
有
对话框\u列表\u项目\u categories.xml
但在你的代码中,你到处都在使用
R.layout.dialog\u list\u item\u category你能用
android.R.layout.simple\u list\u item\u多项选择
而不是dialog\u list\u item\u category.xml
更新:@Luksprog的评论是解决方案:删除
相对论,它的工作原理与android.R.layout.simple\u list\u item\u multiple\u choice
很抱歉,在写问题时出现了一个打字错误,我已经完成了这个分类ListView.setChoiceMode(ListView.choice\u MODE\u multiple);无需将CheckedTextView
包装在RelativeLayout
中,移除有效的包装RelativeLayout
@Luksprog wow。想知道为什么勾选和取消勾选与此相关。@Luksprog我有一个CheckAll按钮,我想根据状态勾选/取消勾选所有项目。知道怎么做吗?行需要是可检查的(实现接口),包装器(相对代码)是不可检查的。你知道怎么做吗在getView
方法中,您需要根据在Cate中存储(和修改)的状态设置类别复选框CheckedTextView
的选中状态