带有开关按钮的Android ListView-一次仅激活一个开关

问题描述 投票:0回答:1

我有一个带有两个开关的列表视图。我希望该功能正常工作,因为一次只能激活一个开关。

我的适配器:

 public class NotificationsAdapter extends ArrayAdapter<String> {

private Context context;
private String mTitle[];
private boolean onOff[];

public NotificationsAdapter(Context c, String mTitle[], boolean onOff[]) {
    super(c, R.layout.adapter_notifications_layout, R.id.notificationsListTv, mTitle);
    this.context = c;
    this.mTitle = mTitle;
    this.onOff = onOff;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {

    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = layoutInflater.inflate(R.layout.adapter_notifications_layout, parent, false);

    Switch notificationSwitch = v.findViewById(R.id.switchNotificationsDaily);
    TextView myTitle = v.findViewById(R.id.notificationsListTv);

    myTitle.setText(mTitle[position]);
    notificationSwitch.setChecked(onOff[position]);
    return v;

我的班级:

   private String[] mTitle = new String[]{"Once Daily", "Twice Daily"};
   private Switch notificationSwitch;
   private boolean[] onOff = new boolean[] {false, false};


     NotificationsAdapter notificationsAdapter = new NotificationsAdapter(getActivity(), mTitle, onOff);
    listView = view.findViewById(R.id.notificationsListView);
    listView.setAdapter(notificationsAdapter);
    listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);



    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


            if (onOff[position]) {
                notificationSwitch.setChecked(false);
                onOff[position] = false;
            } else {
                onOff[position] = true;
                notificationSwitch.setChecked(true);
            }
        }

当前使用此代码,我可以选择两个开关同时处于活动状态。当我选择多个开关时,我希望另一个开关停用。使该功能正常工作的任何帮助将不胜感激。

java android android-listview android-switch
1个回答
0
投票
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

        resetValues(position);

        if (onOff[position]) {
            notificationSwitch.setChecked(false);
            onOff[position] = false;
        } else {
            onOff[position] = true;
            notificationSwitch.setChecked(true);
        }
    }
}

private void resetValues(int selectedPosition){
    int size = onOff.length;
    for(int i=0; i < size; i++){
        if(i == selectedPosition){
           break;
        }
        onOff[i] = false;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.