【问题标题】:How to save toggle button state separately on each item of listview如何在列表视图的每个项目上分别保存切换按钮状态
【发布时间】:2026-02-07 18:30:02
【问题描述】:

我开始一个新的活动,点击我的列表视图中的一个项目。当我打开一个新活动时,会有一个切换。我尝试在列表视图的每个项目上分别保存切换状态。我应该使用共享偏好吗?但是怎么做呢?

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.one_event);

btnAddToList = (ToggleButton) findViewById(R.id.btnAddToList);
    btnAddToList.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked) {
            if(isChecked) {
                addEventToList();
                scheduleNotification(getNotification("The Event begin soon"), 7200000);
            }
            else {
                Toast.makeText(OneEvent.this, id_favorite_event, Toast.LENGTH_LONG).show();
            };
        }
    });
 }


 private void addEventToList(){
    final String user_id = id_user;
    final String event_id = id_event;

    class AddNewEventToList extends AsyncTask<Void,Void,String>{
        ProgressDialog loading;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(OneEvent.this,"Please", "wait",false,false);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            String suc = getFavoriteEventId(s);
            if(suc.equalsIgnoreCase("success")){
                Toast.makeText(OneEvent.this, "Done", Toast.LENGTH_LONG).show();
            }else {
                Toast.makeText(OneEvent.this, s, Toast.LENGTH_LONG).show();
            }
        }

        @Override
        protected String doInBackground(Void... v) {
            HashMap<String,String> params = new HashMap<>();
            params.put(Config.LIST_COLUMN_USER_ID,user_id);
            params.put(Config.LIST_COLUMN_EVENT_ID, event_id);

            RequestHandler rh = new RequestHandler();
            String result = rh.sendPostRequest(Config.URL_ADD_TO_LIST, params);
            return result;
        }

        private String getFavoriteEventId(String json) {
            try {
                JSONObject jsonObject = new JSONObject(json);
                JSONArray result = jsonObject.getJSONArray(Config.TAG_JSON_ARRAY_FOR_FAVORITE_EVENT_ID);
                JSONObject c = result.getJSONObject(0);
                id_favorite_event = c.getString(Config.TAG_GET_FAVORITE_EVENT_ID);
                json = "success";
                return json;

            } catch (JSONException e) {
                e.printStackTrace();
            }
            return json;
        }
    }
    AddNewEventToList anetl = new AddNewEventToList();
    anetl.execute();
}

【问题讨论】:

  • 如果您关闭应用程序,必须保留切换状态?
  • @ansorod 是的,对
  • @ansorod 类似“点赞按钮”

标签: android listview sharedpreferences


【解决方案1】:

您可以设置一些对象,一个布尔值,以指示在这种情况下检查到列表视图中的视图。您可以使用setTag 为视图设置标签。您可以使用getTag 从中取回值。希望这会有所帮助。

【讨论】:

  • 我不明白,你能举例说明一下吗?
最近更新 更多