Есть ли способ обновить значение намерения? - PullRequest
1 голос
/ 12 марта 2012

Итак, у меня есть массив и отображается в IntentA (с помощью списка).Затем я нажимаю на элемент в IntentA, чтобы перейти к IntentB.В intentB я изменяю массив, который используется в IntentA.Когда я возвращаюсь, массив не обновляется.

Есть ли способ решить эту проблему?

Вот код

Intent A: Intent i = new Intent("com.my.package.MYBOOKMARKS");
                startActivity(i);
String BookmarkList[] = Utils.getBookmarksArray();


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ListView lv = getListView();
    LayoutInflater inflater = getLayoutInflater();
    View logo = inflater.inflate(R.layout.bookmarks,
            (ViewGroup) findViewById(R.id.logo));
    lv.addHeaderView(logo, null, false);
    lv.setAdapter(new ArrayAdapter<String>(this, R.layout.menu, BookmarkList)); 

}

Intent B: @Override
        public void onClick(View v){
            if (BookmarkButton.isChecked()) {
                Toast.makeText(AClass.this, "Added to bookmarks", Toast.LENGTH_SHORT).show();
                Utils.setBookmarksArray("AValue");
                checked = true;
            } else {
                Utils.removeFromBookmarksArray("AValue");
                Toast.makeText(Aclass.this, "Removed from bookmarks", Toast.LENGTH_SHORT).show();
                checked = false;
            }
        }

Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 марта 2012

Если вы используете ArrayAdapter для отображения ваших элементов в просмотре списка, то вам может потребоваться вызвать adapter.notifyDataSetChanged () после изменения данных в IntentB или аналогичным образом просто найти способ сделать данные недействительными в представлении списка, чтобы они перерисованы.

Если вышеперечисленное не решит вашу проблему, тогда да, возможно, вам придется сохранять и восстанавливать данные в течение жизненного цикла приложения Android, как предложил Тим. Также, пожалуйста, оставьте свой код.

Обновление с момента публикации кода: похоже, у вас есть вспомогательные методы в классе Utils, которые обрабатывают добавление и удаление закладок из ArrayAdapter. Как я упоминал ранее, вы должны добавить строку adapter.notifyDataSetChanged () после добавления и удаления элементов из массива.

Также при возвращении в IntentA возможно, что вы повторно инициализируете действие и таким образом устанавливаете новый ArrayAdapter в список и, следовательно, очищаете его каждый раз. Я бы реализовал методы onSaveInstanceState и onRestoreInstanceState в действии A, чтобы данные в массиве сохранялись, когда он оставлял фокус.

0 голосов
/ 12 марта 2012

Вам нужно будет сохранять и восстанавливать данные в onPause () и onResume () в обеих действиях, если вы хотите, чтобы они были синхронизированы.

Опубликуйте свой код, и вам будет легче дать конкретный совет, как этого добиться.

...