有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个带有两个开关的列表视图。如果一次只有一个开关处于活动状态,我希望该功能正常工作

--更新

我的适配器:

 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) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.adapter_notifications_layout, parent, false);

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

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

    view.setClickable(true);
    view.setFocusable(true);
    view.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            int size = onOff.length;
            for (int i = 0; i < size; i++) {
                if (i == position) {
                    break;
                }
                onOff[i] = false;
            }

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

    });

    return view;
}

我的班级:

   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.setItemsCanFocus(true);

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

        }
    });
  }

目前有了这段代码,我可以同时选择两个开关。当我选择多个开关时,我希望另一个开关停用。如果您能帮助我们实现此功能,我们将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    在您的活动中:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    
            resetValues(position);
    
            if (onOff[position]) {
                onOff[position] = false;
            } else {
                onOff[position] = true;
            }
            notifyDataSetChanged();
        }
    }
    
    private void resetValues(int selectedPosition){
        int size = onOff.length;
        for(int i=0; i < size; i++){
            if(i == selectedPosition){
               continue;
            }
            onOff[i] = false;
        }
    }
    

    在适配器中:

    notificationSwitch.setChecked(onOff[position]);
    

    同样,从适配器中删除您的单击侦听器

    逻辑是:-将除所选项目外的所有其他值设为false,然后根据其先前状态更改所选项目的状态