Общие предпочтения множественного выбора ListView - PullRequest
1 голос
/ 27 июня 2011

Я занимаюсь разработкой приложения, которое позволяет управлять задачами, в которых я выполняю два действия. Первым действием является простой просмотр списка, в котором представлен список пользователей. Второе действие - просмотр списка с множественным выбором, который показывает задачи, связанные с этим пользователем. Мне удалось достичь своей первой цели, которая состояла в том, чтобы сохранить состояние флажка, используя общие настройки. Моя проблема в том, что когда я сохраняю состояние флажков для пользователя, когда вы видите задачи другого пользователя, они больше не проверяются. Как я могу решить мою проблему.

Вот как я заполняю список:

    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 Ответ

2 голосов
/ 27 июня 2011

Вам необходимо будет включить в свои предпочтения пользователя, с которым связаны эти конкретные задачи.Не идеально использовать SharredPreferferences для этой цели (лучше просто использовать базу данных вместо IMO), но в конце вам нужно найти выбранные элементы для конкретного пользователя, а затем, когда пользователь выбран, вы можете увидеть, «какие» элементыгде выбрано.

...