Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么listview中的自定义复选框可以';不可阻挡_Android_Listview - Fatal编程技术网

Android 为什么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

我试图在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);
    }
}
我得到了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>