Android 为什么listview中的自定义复选框可以';不可阻挡
我试图在listview中设置复选框的选中状态,代码如下:Android 为什么listview中的自定义复选框可以';不可阻挡,android,listview,Android,Listview,我试图在listview中设置复选框的选中状态,代码如下: mShalatAdapter = new ArrayAdapter<String>(getActivity(),R.layout.pengaturan_list_item, R.id.label_shalat, waktuShalat); mListShalat = (ListView) v.findViewById(R.id.pengaturan_checkbox); mListShalat.setAdapter(mSh
mShalatAdapter = new ArrayAdapter<String>(getActivity(),R.layout.pengaturan_list_item, R.id.label_shalat, waktuShalat);
mListShalat = (ListView) v.findViewById(R.id.pengaturan_checkbox);
mListShalat.setAdapter(mShalatAdapter);
CheckBox cb;
TextView txv;
for (int i = 0; i < mListShalat.getCount(); i++) {
View vListSortOrder = mListShalat.getAdapter().getView(i, null, null);
txv = (TextView) vListSortOrder.findViewById(R.id.label_shalat);
cb = (CheckBox) vListSortOrder.findViewById(R.id.status_shalat);
String labelShalat = txv.getText().toString();
Toast.makeText(getActivity(), labelShalat, Toast.LENGTH_SHORT).show();
if (cb.isChecked() == false) {
cb.setChecked(true);
}
}
我得到了TextView和CheckBox的值,但我不知道为什么该复选框没有显示设备中的真实状态。请帮忙,提前谢谢
my ibadah_checkbox_list.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_checked="true"
android:drawable="@drawable/checkbox_ibadah_checked" />
<item android:state_checked="false"
android:drawable="@drawable/checkbox_ibadah_unchecked" />
</selector>
改变适配器的工作方式可能值得一试 与其创建标准的ArrayAdapter,不如尝试从中继承,然后在getView()方法中从list_item.xml中扩展视图 在那里,您可以像在循环中一样从视图中提取复选框,并根据需要设置其值。这是做这类事情的标准方式 我猜测,为什么您所做的不起作用,是因为ArrayAdapter在需要显示视图时创建视图,而不是在您使用的这个循环中创建视图,因此,尽管它在您请求视图时生成并提供视图,但这些视图不一定是显示的视图 我会这样做:
public class MyArrayAdapter extends ArrayAdapter<String>
{
public MyArrayAdapter(Context context, int textViewResourceId, List<String> objects)
{
super(context, textViewResourceId, objects);
}
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if(v == null)
{
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.pengaturan_list_item, null);
}
TextView tv = (TextView)v.findViewById(R.id.label_shalat);
CheckBox cb = (CheckBox)v.findViewById(R.id.status_shalat);
tv.setText(getItem(position));
if (!cb.isChecked())
cb.setChecked(true);
return v;
}
}
希望这有帮助:)我认为问题在于你的布局。您的
文本视图
有一个布局宽度
的匹配父视图
,它覆盖了复选框
,并填充了整个宽度布局。因此,您需要正确划分布局
试试下面的布局,告诉我效果
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:weightSum="2"
android:paddingTop="5dp" >
<TextView
android:id="@+id/label_shalat"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
android:text="Label Ibadah"
android:textColor="@android:color/white"
android:background="@android:color/black"
android:textSize="20dp" />
<CheckBox
android:id="@+id/status_shalat"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@drawable/ibadah_checkbox_list"
android:visibility="visible" />
</LinearLayout>
在您的ListView中添加android:DegenantFocusability=“blocksDescendants”
。希望它能工作……请发布idadah\u复选框\u列出可绘制的xml(我假设它是xml)@GilMoshayof好的,请检查谢谢Gil,这是我最不想做的事
mShalatAdapter = new MyArrayAdapter(this, R.layout.pengaturan_list_item, objectList);
mListShalat = (ListView) v.findViewById(R.id.pengaturan_checkbox);
mListShalat.setAdapter(mShalatAdapter);
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:weightSum="2"
android:paddingTop="5dp" >
<TextView
android:id="@+id/label_shalat"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
android:text="Label Ibadah"
android:textColor="@android:color/white"
android:background="@android:color/black"
android:textSize="20dp" />
<CheckBox
android:id="@+id/status_shalat"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@drawable/ibadah_checkbox_list"
android:visibility="visible" />
</LinearLayout>