共享首选项多选ListView

时间:2011-06-27 16:53:51

标签: java android android-listview sharedpreferences

我正在开发一个应用程序,它可以管理我有两个活动的任务。第一个活动是一个简单的列表视图,其中显示了一个用户列表。第二个活动是多选列表视图,显示与该用户关联的任务。我设法达到我的第一个目标,即使用共享首选项存储复选框的状态。我的问题是,当我保存用户的复选框状态时,当您看到另一个用户的任务时,不再检查这些任务。 我怎样才能解决我的问题。

这就是我填写清单的方式:

    mList = (ListView) findViewById(android.R.id.list);      
    final DbAdapter db = new DbAdapter(this);
    db.open();  
    data = db.getAllTasks(getIntent().getExtras().get("nameUser").toString());
    adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,data);
    mList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    mList.setAdapter(adapter);

这是我选择要显示任务的用户的方式:

        mList.setOnItemClickListener(new OnItemClickListener() {     
        public void onItemClick(AdapterView<?> a, View v, int position, long id) {
            final String text = (String) mList.getItemAtPosition(position);
        }
    });

这是我使用SharedPreferences保存状态的方法:

    private void LoadSelections() {
    // if the selections were previously saved load them

    SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE);

    if (settingsActivity.contains(SETTING_DB)) {
        String savedItems = settingsActivity
                .getString(SETTING_DB, "");

        this.selectedItems.addAll(Arrays.asList(savedItems.split(",")));
        int count = this.mList.getAdapter().getCount();

        for (int i = 0; i < count; i++) {
            String currentItem = (String) this.mList.getAdapter()
                    .getItem(i);
            if (this.selectedItems.contains(currentItem)) {
                this.mList.setItemChecked(i, true);
            }

        }

    }
}


private void SaveSelections() {

    // save the selections in the shared preference in private mode for the user

    SharedPreferences settingsActivity = getPreferences(MODE_PRIVATE);
    SharedPreferences.Editor prefEditor = settingsActivity.edit();

    String savedItems = getSavedItems();

    prefEditor.putString(SETTING_DB , savedItems);

    prefEditor.commit();
}



private String getSavedItems() {
    String savedItems = "";

    int count = this.mList.getAdapter().getCount();

    for (int i = 0; i < count; i++) {

        if (this.mList.isItemChecked(i)) {
            if (savedItems.length() > 0) {
                savedItems += "," + this.mList.getItemAtPosition(i);
            } else {
                savedItems += this.mList.getItemAtPosition(i);
            }
        }

    }
    return savedItems;
}

我的问候。

1 个答案:

答案 0 :(得分:2)

作为“偏好设置”的一部分,您需要包含与这些特定任务相关的用户。为此目的使用SharredPreferrences并不理想(最好只使用数据库而不是IMO),但最后你需要找到特定用户的选定项目,然后当用户被选中时你可以看到“which”项目在哪里选择。