我正在尝试在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(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);
}
}
这是我的pengaturan_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="match_parent"
android:gravity="center_vertical|center_horizontal"
android:orientation="horizontal"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
<TextView
android:id="@+id/label_shalat"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
android:text="Label Ibadah"
android:textColor="@android:color/white"
android:textSize="20dp" />
<CheckBox
android:id="@+id/status_shalat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:button="@drawable/ibadah_checkbox_list"
android:visibility="visible" />
</LinearLayout>
我得到了TextView和CheckBox的值,但我不知道为什么CheckBox没有在设备中显示真实状态。请提前帮助,谢谢。
我的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>
答案 0 :(得分:0)
可能值得改变适配器的工作方式。
不是创建标准的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;
}
}
然后,像这样设置适配器(objectList
是标签的字符串列表):
mShalatAdapter = new MyArrayAdapter(this, R.layout.pengaturan_list_item, objectList);
mListShalat = (ListView) v.findViewById(R.id.pengaturan_checkbox);
mListShalat.setAdapter(mShalatAdapter);
希望这会有所帮助:)
答案 1 :(得分:0)
我认为问题在于你的布局。您的TextView
有一个layout_width
match_parent
,其中涵盖了CheckBox
并填充了整个宽度布局。所以你需要正确划分布局。
尝试下面的布局并告诉我效果。
<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>
答案 2 :(得分:0)
在ListView.Hope中添加android:descendantFocusability="blocksDescendants"
它有效....