Обновить списокПросмотр при использовании onActivityResult

Объяснение структуры: В MainActivity у меня есть меню ящика и фрагмент для отображения содержимого. Из ящика я могу выбрать категорию, а список предметов в этой категории читается из базы данных и отображается в спискеView в фрагменте содержимого.

Когда щелкнут элемент из списка, появится функция DetailActivity.

Проблема. В DetailActivity есть кнопка для удаления элемента из базы данных. При нажатии этого элемента функция DetailActivity закрывается. И отображается предыдущий фрагмент содержимого в MainActivity. (например, нажатие кнопки возврата). Но проблема в том, что элемент, который я удалил, все еще отображается в спискеView. Я перешел в соответствующую категорию, чтобы обновлять listView и этот элемент больше не существует.

Что я ожидаю: я хочу, чтобы при удалении элемента в DetailActivity и возврате к предыдущему действию, listView автоматически обновляется.

Что я сделал: я знаю, что могу использовать onActivityResult следующим образом:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 // TODO Auto-generated method stub
 super.onActivityResult(requestCode, resultCode, data);
 // Refresh Bookmarks page when a bookmark is deleted
 if (requestCode == LESSON_DETAIL_ACTIVITY && resultCode == -1) {
 datasource.open();
 lessons = datasource.findMyLessons();
 refreshDisplay(context, view, category, i); // Problem Here!
 }
}

Как вы видите, мой метод refreshDisplay содержит 4 аргумента. Первоначально эти аргументы отправляются в DetailActivity. (когда элемент списка щелкнут во фрагменте внутри MainActivity) Когда я нажимаю кнопку "Удалить элемент" в DetailActivity и закрывается. Я не знаю, как получить этот аргумент, чтобы обновить список.

Здесь я размещаю код моего метода refreshDisplay и как я его называю на всякий случай, когда это необходимо. Я вызываю метод refreshDisplay внутри фрагмента (в MainActivity), а сам refreshDisplay находится в MainActivity.

public static class contentFragment extends Fragment {
 public static final String ARG_CATEGORY_NUMBER = "category_number";
 public contentFragment() {
 // Empty constructor required for fragment subclasses
 }
 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
 Bundle savedInstanceState) {
 View rootView = inflater.inflate(R.layout.fragment_content, container, false);
 int i = getArguments().getInt(ARG_CATEGORY_NUMBER);
 String category = getResources().getStringArray(R.array.category)[i];

 ((MainActivity) this.getActivity()).refreshDisplay(this.getActivity(),rootView, category, i);

 getActivity().setTitle(category);
 return rootView;
 }
}

мой метод refreshDisplay:

public void refreshDisplay(Context context, View view, String category, int i) {

 List<lesson> lessonByCategory = datasource.findByCategory(category, i);

 final ListView lv = (ListView) view.findViewById(R.id.listView);
 final ArrayAdapter<lesson> adapter = new LessonListAdapter(context, lessonByCategory);
 lv.setAdapter(adapter);


 lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 public void onItemClick (AdapterView<!--?--> parent, View view, int position, long id) {
 Log.i(LOGTAG, "onListItemClick called");

 ArrayAdapter<lesson> m_adapter = adapter;
 // get the Lesson object for the clicked row
 Lesson lesson = m_adapter.getItem(position);

 // use this if your 'refreshDisplay()' method is in your activity
 Intent intent = new Intent(MainActivity.this, LessonDetailActivity.class);

 isStared = datasource.isStared(lesson);

 intent.putExtra(".model.Lesson", lesson);
 intent.putExtra("isStared", isStared);

 startActivityForResult(intent, LESSON_DETAIL_ACTIVITY);

 }
 });
 }
</lesson></lesson></lesson>

Кто-нибудь может мне помочь, пожалуйста!

Изменить 1: В моем коде в onActivityResult я вызвал refreshDisplay (контекст, представление, категория, i); Но, пожалуйста, обратите внимание, что те аргументы, которые я прошел, не определены. Без правильных аргументов refreshDisplay не работает!

Изменить 2: У меня есть навигационная панель, содержащая список категорий. Когда я нажимаю на одну из категорий, в моем фрагменте контента onCreateView вызывает refreshDisplay ** и помещает аргументы context & View плюс category & i, которые являются именем и позицией выбранной категории. Теперь refreshDisplay принимает эти аргументы и создает список элементов этой категории и показывает его в фрагменте содержимого. refreshDisplay имеет адаптер списка и прослушиватель, который при нажатии открывается DetailActivity. From DetailActivity Я могу удалить этот элемент, а функция DetailActivity закрыта. Я вернулся к списку. В списке по-прежнему отображается удаленный элемент. Я хочу обновить список.

2 ответа

Решение:-

объявить свой список listCategory static в вашем классе Activity (глобальная переменная)объявите свой listView как переменную экземпляра вашего класса активности.В DetailActivity удалите элемент listCategory (вы можете получить к нему доступ, потому что он статичен) следующим образом:
MainActivity.listCategory.remove(<the position="" of="" that="" detail="">);
</the>

объявите ваш адаптер также как переменную экземпляра вашего класса активности.нет необходимости в вашем методе refreshDisplay, просто используйте метод adapter.notifyDataSetChanged() в методе onActivityResult()


Просто попробуйте мои подсказки на вашем коде.... Я надеюсь, что это может решить вашу проблему

  1. вызовите этот метод после удаления элемента из адаптера. Он обновит содержимое адаптера.

    notifyDataSetChanged()

  2. Вы можете передать контекст следующему методу в качестве первого параметра.

    refreshDisplay (/* this.getActivity()/context, rootView, category, i);

licensed under cc by-sa 3.0 with attribution.