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 に答える