0

次のレイアウトのカスタムlistViewがあり、通常のSingleChoiceListViewのように動作させたいです。Single_Choice_Modeにリストビューを設定していますが、クリックしてもラジオボタンが選択されません。私は何が間違っているのですか?単一行の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="wrap_content"
          android:gravity="center_vertical"
          android:minHeight="?listPreferredItemHeightSmall"
          android:orientation="horizontal"
          android:clickable="true"
          android:focusable="true"
          android:paddingLeft="16dip"
          android:paddingRight="12dip" >
    <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center_vertical"
            android:orientation="vertical" >
        <TextView
                android:id="@android:id/text1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="marquee"
                android:gravity="center_vertical|left"
                android:singleLine="true"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="?textColorAlertDialogListItem" />
        <TextView
                android:id="@android:id/text2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:ellipsize="marquee"
                android:gravity="center_vertical|left"
                android:singleLine="true"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="?textColorAlertDialogListItem" />

    </LinearLayout>

    <TextView
            android:id="@+id/preco"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:ellipsize="marquee"
            android:gravity="fill"
            android:singleLine="true"
            android:textStyle="bold"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="@color/appgreen" />
    <RadioButton
            android:id="@+id/radio"
            android:layout_width="35dip"
            android:layout_height="wrap_content"
            android:clickable="false"
            android:focusable="false"
            android:gravity="center_vertical"
            android:paddingRight="12dip" />
</LinearLayout>
4

3 に答える 3

0

私は少し遅れていることを知っていますが、同じ問題に遭遇し、ここで解決策を見つけました (翻訳): https://extra--vision-blogspot-com.translate.goog/2016/07/android-single -choice-listview.html?_x_tr_sl=auto&_x_tr_tl=en&_x_tr_hl=en-US&_x_tr_pto=nui

この例のように、選択した項目の位置を保持するカスタム アダプターを使用しました。

public final class SingleChoiceAdapter extends ArrayAdapter<String> {
    private static final String[] FRUITS = {
        "Apple", "Banana", "Lemon", "Orange", "Grape"
    };
    private final LayoutInflater mInflater;
    private int mSelectedIndex = -1;
    SingleChoiceAdapter(Context context) {
        super(context, 0);
        addAll(FRUITS);
        mInflater = LayoutInflater.from(context);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            view = mInflater.inflate(R.layout.item_layout, parent, false);
        }
    
        TextView textView       = (TextView)    view.findViewById(R.id.text_view);
        RadioButton radioButton = (RadioButton) view.findViewById(R.id.radio_button);
        String fruit = getItem(position);
        textView.setText(fruit);
        radioButton.setChecked(position == mSelectedIndex);
        return view;
    }
    void setSelectedIndex(int index) {
        mSelectedIndex = index;
        notifyDataSetChanged();
    }
}

setOnItemClicklistener次に、次の例のように、リスト ビューにを実装します。

public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ListView listView = new ListView(this);
        listView.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE);
        final SingleChoiceAdapter adapter = new SingleChoiceAdapter(this);
        listView.setOnItemClickListener(new     AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                adapter.setSelectedIndex(i);
            }
        });
        listView.setAdapter(adapter);
        setContentView(listView);
    }
}
于 2021-11-01T04:01:01.963 に答える