Android 具有单个选项的ListView可显示唯一选择

Android 具有单个选项的ListView可显示唯一选择,android,listview,Android,Listview,我想要一个具有单一选择的listview。我使用CheckedTextView,当用户单击一行时,我更新CheckedTextView。如果他单击另一行,旧选择将检索“正常”UI,新选择将获取新UI 它在Nexus7(4.2.2)上运行良好,但在GalaxySII(4.0.4)上,我有一个选择了两行的情况,我必须单击两次才能获得正确的行为 我已设置此属性: setChoiceMode(ListView.CHOICE_MODE_SINGLE); 以下是我的布局: <?xml version

我想要一个具有单一选择的listview。我使用CheckedTextView,当用户单击一行时,我更新CheckedTextView。如果他单击另一行,旧选择将检索“正常”UI,新选择将获取新UI

它在Nexus7(4.2.2)上运行良好,但在GalaxySII(4.0.4)上,我有一个选择了两行的情况,我必须单击两次才能获得正确的行为

我已设置此属性:

setChoiceMode(ListView.CHOICE_MODE_SINGLE);
以下是我的布局:

<?xml version="1.0" encoding="utf-8"?>
    <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res/com.ecab"
    android:id="@+id/option"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    android:background="@drawable/ban_vhcl_list_off"
    android:gravity="center_vertical"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:text="@string/fake" />

这是我的适配器

private class OptionsAdapter extends ArrayAdapter<String> implements OnItemClickListener {
    private final List<String> options;
    public OptionsAdapter(List<String> pOptions) {
        super(VehiculeActivity.this, R.layout.vehicule_list_item);
        options = pOptions;
    }

    @Override
    public int getCount() {
        return options.size();
    }

    @Override
    public String getItem(int position) {
        return options.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null)
            convertView = LayoutInflater.from(VehiculeActivity.this).inflate(R.layout.vehicule_list_item, null);
        CheckedTextView option = (CheckedTextView) convertView.findViewById(R.id.option);
        option.setText(options.get(position));
        if (!option.isChecked()) {
            Log.d(Constants.D_TAG, "is NOT checked");
            option.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
            option.setBackgroundResource(R.drawable.ban_vhcl_list_off);
        } else {
            Log.d(Constants.D_TAG, "is checked");
            option.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.check_box, 0);
            option.setBackgroundResource(R.drawable.ban_vhcl_list_on);
        }
        return convertView;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        CheckedTextView option = (CheckedTextView) view.findViewById(R.id.option);
        option.setChecked(true);
        notifyDataSetChanged();
    }
}
private class options适配器扩展了ArrayAdapter实现了OnItemClickListener{
私人最终名单选择;
公共选项适配器(列出选项){
超级(车辆活动、本、右布局、车辆列表项目);
选项=选项;
}
@凌驾
public int getCount(){
返回选项。size();
}
@凌驾
公共字符串getItem(int位置){
返回选项。获取(位置);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(convertView==null)
convertView=LayoutFlater.from(VehicleuleActivity.this).充气(R.layout.Vehicleue\u列表项,空);
CheckedTextView选项=(CheckedTextView)convertView.findViewById(R.id.option);
option.setText(options.get(position));
如果(!option.isChecked()){
Log.d(Constants.d_标记“未选中”);
option.SetCompoundDrawableSwithinInstructBounds(0,0,0,0);
选项.挫折资源(R.drawable.ban_vhcl_list_off);
}否则{
Log.d(Constants.d_标记“已选中”);
option.SetCompoundDrawableSwithintInInsicBounds(0,0,R.drawable.check_框,0);
选项.挫折资源(R.drawable.ban_vhcl_list_on);
}
返回视图;
}
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
CheckedTextView选项=(CheckedTextView)view.findViewById(R.id.option);
option.setChecked(true);
notifyDataSetChanged();
}
}

为什么不将默认的
ArrayAdapter
listView.setChoiceMode(listView.CHOICE\u MODE\u SINGLE)一起使用呢
我使用
listView.setChoice(listView.CHOICE\u MODE\u SINGLE)
但我不明白为什么在nexus 7上我会有预期的行为,而在SGS II上,我会有问题。我使用自定义适配器,因为数据可以更改。目前,我只有字符串,但将来可能会有另一种数据类型。您必须映射所选项目。关于自定义适配器的“多选”。您必须修改一点,使其成为单选。我会看到,但这个问题对我来说仍然是一个谜。也许可以解决您的谜。