2

単一の選択肢を持つリストビューが必要です。私は CheckedTextView を使用し、ユーザーが 1 つの行をクリックすると、CheckedTextView を更新します。彼が別の行をクリックすると、古い選択は「通常の」UI を取得し、新しい選択は新しい UI を取得します。

nexus 7 (4.2.2) では正常に動作しますが、galaxy S II (4.0.4) では、2 つの行が選択されている場合があり、正しい動作を得るには 2 回クリックする必要があります。

私は正確に、私はこのプロパティを設定しました:

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();
    }
}
4

0 に答える 0