0

我正在尝试在列表视图中设置我的复选框的选中状态,这是代码:

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>
4

3 回答 3

0

添加android:descendantFocusability="blocksDescendants"您的 ListView。希望它有效....

于 2013-09-26T03:53:42.567 回答
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);

希望这可以帮助 :)

于 2013-09-26T02:27:52.360 回答
0

我认为问题在于您的布局。你TextView有一个layout_widthof 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>
于 2013-09-26T02:36:51.140 回答