Android 带有自定义图像复选框的 ListFragment
Android ListFragment with Custom image checkbox
我正在使用一个 Listfragment,它有一个复选框,其中包含在 state_checked 上更改的自定义图像。
但 'onListItemClick' 功能只有在其布局中将复选框分配给 android:focusable="false" 和 android:clickable="false" 时才有效。
在这种情况下,复选框的自定义图像更改不起作用。
有没有办法同时完成这两项工作together.Any 不胜感激。
public class SympFragment extends ListFragment implements OnClickListener {
private ListView lv;
private String listview_array[] = {
"Text1",
"Text2",
"Text3",
"Text4",
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_symp, container, false);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
R.layout.ch_row, listview_array);
setListAdapter(adapter);
return rootView;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
switch( position )
{
case 0: Toast.makeText(getActivity().getApplicationContext(), "Well Done!", Toast.LENGTH_LONG).show();
break;
}
}
}
布局:
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/chcheckbox"
android:textSize="15sp"
android:textColor="#ffffff"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:button="@drawable/chselector"
android:drawableLeft="@android:color/transparent"
android:focusable="false"
android:clickable="false"
android:padding="8dp"
/>
选择器xml:
<?xml version="1.0" encoding="utf-8"?>
<item android:drawable="@drawable/unchecked" android:state_checked="false"/>
<item android:drawable="@drawable/checked" android:state_checked="true"/>
<item android:drawable="@drawable/unchecked"/>
在可绘制对象中创建 xml 文件 custom_checkbox.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/unselected" android:state_checked="false"/>
<item android:drawable="@drawable/selected" android:state_checked="true"/>
<item android:drawable="@drawable/unselected"/>
</selector>
并在复选框调用中:
android:button="@drawable/custom_checkbox"
似乎 'onListItemClick' 从不接受复选框输入。所以复选框必须设置为 android:focusable="false" 和 android:clickable="false"。
但是可以通过以下方式触发复选框:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
String item = (String) getListAdapter().getItem(position);
Toast.makeText(getActivity(), item + " selected", Toast.LENGTH_LONG).show();
CheckBox chcheckbox;
switch(position){
case 0:
chcheckbox = (CheckBox) v.findViewById(R.id.chcheckbox);
if (chcheckbox.isChecked() == false) {
chcheckbox.setChecked(true);
} else {
chcheckbox.setChecked(false);
} break;
case 1:
chcheckbox = (CheckBox) v.findViewById(R.id.chcheckbox);
if (chcheckbox.isChecked() == false) {
chcheckbox.setChecked(true);
} else {
chcheckbox.setChecked(false);
} break;
}
}
我不确定这是否是最佳做法。但是这个调整非常有用,因为我没有找到任何其他解决方案。
我正在使用一个 Listfragment,它有一个复选框,其中包含在 state_checked 上更改的自定义图像。
但 'onListItemClick' 功能只有在其布局中将复选框分配给 android:focusable="false" 和 android:clickable="false" 时才有效。
在这种情况下,复选框的自定义图像更改不起作用。
有没有办法同时完成这两项工作together.Any 不胜感激。
public class SympFragment extends ListFragment implements OnClickListener {
private ListView lv;
private String listview_array[] = {
"Text1",
"Text2",
"Text3",
"Text4",
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_symp, container, false);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
R.layout.ch_row, listview_array);
setListAdapter(adapter);
return rootView;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
switch( position )
{
case 0: Toast.makeText(getActivity().getApplicationContext(), "Well Done!", Toast.LENGTH_LONG).show();
break;
}
}
}
布局:
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/chcheckbox"
android:textSize="15sp"
android:textColor="#ffffff"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:button="@drawable/chselector"
android:drawableLeft="@android:color/transparent"
android:focusable="false"
android:clickable="false"
android:padding="8dp"
/>
选择器xml:
<?xml version="1.0" encoding="utf-8"?>
<item android:drawable="@drawable/unchecked" android:state_checked="false"/>
<item android:drawable="@drawable/checked" android:state_checked="true"/>
<item android:drawable="@drawable/unchecked"/>
在可绘制对象中创建 xml 文件 custom_checkbox.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/unselected" android:state_checked="false"/>
<item android:drawable="@drawable/selected" android:state_checked="true"/>
<item android:drawable="@drawable/unselected"/>
</selector>
并在复选框调用中:
android:button="@drawable/custom_checkbox"
似乎 'onListItemClick' 从不接受复选框输入。所以复选框必须设置为 android:focusable="false" 和 android:clickable="false"。 但是可以通过以下方式触发复选框:
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
String item = (String) getListAdapter().getItem(position);
Toast.makeText(getActivity(), item + " selected", Toast.LENGTH_LONG).show();
CheckBox chcheckbox;
switch(position){
case 0:
chcheckbox = (CheckBox) v.findViewById(R.id.chcheckbox);
if (chcheckbox.isChecked() == false) {
chcheckbox.setChecked(true);
} else {
chcheckbox.setChecked(false);
} break;
case 1:
chcheckbox = (CheckBox) v.findViewById(R.id.chcheckbox);
if (chcheckbox.isChecked() == false) {
chcheckbox.setChecked(true);
} else {
chcheckbox.setChecked(false);
} break;
}
}
我不确定这是否是最佳做法。但是这个调整非常有用,因为我没有找到任何其他解决方案。