【问题标题】:Android ListFragment with Custom image checkbox带有自定义图像复选框的 Android ListFragment
【发布时间】:2015-01-26 15:47:55
【问题描述】:

我正在使用一个 Listfragment,它有一个带有自定义图像的复选框,在 state_checked 上会发生变化。
但 'onListItemClick' 功能仅在其布局中的复选框被分配给 android:focusable="false" 和 android:clickable="false" 时才有效。
在这种情况下,复选框的自定义图像更改不起作用。
有没有办法同时完成两者。感谢任何帮助。

public class SympFragment extends ListFragment implements OnClickListener {
private ListView lv;
private String listview_array[] = {
        "Text1",
        "Text2",
        "Text3",
        "Text4",
};
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_symp, container, false);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
            R.layout.ch_row, listview_array);
    setListAdapter(adapter);

    return rootView;
}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    switch( position )
    {
        case 0:    Toast.makeText(getActivity().getApplicationContext(), "Well Done!", Toast.LENGTH_LONG).show();
            break;

    }
}

}

布局:

<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/chcheckbox"
     android:textSize="15sp"
     android:textColor="#ffffff"
     android:layout_height="wrap_content"
     android:layout_width="fill_parent"
     android:button="@drawable/chselector"
     android:drawableLeft="@android:color/transparent"
     android:focusable="false"
     android:clickable="false"
     android:padding="8dp"
  />

选择器 xml:

<?xml version="1.0" encoding="utf-8"?>

<item android:drawable="@drawable/unchecked" android:state_checked="false"/>
<item android:drawable="@drawable/checked" android:state_checked="true"/>
<item android:drawable="@drawable/unchecked"/>

【问题讨论】:

    标签: android android-layout android-fragments android-ui android-listfragment


    【解决方案1】:

    在drawable中创建xml文件custom_checkbox.xml:

     <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:drawable="@drawable/unselected" android:state_checked="false"/>
        <item android:drawable="@drawable/selected" android:state_checked="true"/>
        <item android:drawable="@drawable/unselected"/>    
    </selector>
    

    在复选框调用中:

        android:button="@drawable/custom_checkbox"
    

    【讨论】:

    • 不..它仍然无法正常工作。仅当我将复选框的可聚焦和可点击设置为 false 时,onListItemClickListener 才有效。如果我这样做..选择器不起作用。我现在附上了编码部分。
    【解决方案2】:

    似乎“onListItemClick”从不接受复选框输入。所以复选框必须设置为 android:focusable="false" 和 android:clickable="false"。 但是可以通过以下方式触发复选框:

        @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        String item = (String) getListAdapter().getItem(position);
        Toast.makeText(getActivity(), item + " selected", Toast.LENGTH_LONG).show();
        CheckBox chcheckbox;
        switch(position){
            case 0:
    
                chcheckbox = (CheckBox) v.findViewById(R.id.chcheckbox);
                if (chcheckbox.isChecked() == false) {
                    chcheckbox.setChecked(true);
                } else {
                    chcheckbox.setChecked(false);
                } break;
    
            case 1:
    
                chcheckbox = (CheckBox) v.findViewById(R.id.chcheckbox);
                if (chcheckbox.isChecked() == false) {
                    chcheckbox.setChecked(true);
                } else {
                    chcheckbox.setChecked(false);
                } break;
        }
    
    }
    

    我不确定这是否是最佳做法。但是这个调整非常有用,因为我没有找到任何其他解决方案。

    【讨论】:

      猜你喜欢
      • 2014-06-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多