解释结构:在 MainActivity 我有一个抽屉菜单和一个片段来显示内容。从抽屉中,我可以选择一个类别,从数据库中读取该类别中的项目列表,并显示在内容片段的 listView 中。
单击列表视图中的项目时,将启动 DetailActivity。
问题:在 DetailActivity 中有一个用于从数据库中删除项目的按钮。按下此项目时,DetailActivity 将关闭。并显示 MainActivity 中之前的内容片段。(比如按下后退按钮)但问题是我删除的项目仍然显示在 listView 中。我已经转到相关类别,以便 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 方法的代码以及我如何调用它以防万一。我在片段内(在 MainActivity 中)调用 refreshDisplay 方法,并且 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);
}
});
}
谁能帮帮我吗?
编辑 1:在我的代码中,在onActivityResult我调用了 refreshDisplay(context, view, category, i); 但请注意我通过的那些论点没有定义。没有正确的参数 refreshDisplay 不起作用!
编辑 2:我有一个包含类别列表的抽屉导航。当我单击其中一个类别时,在我的内容片段中,onCreateView调用refreshDisplay ** 并放置上下文和视图参数加上类别和i,它们是所选类别的名称和位置。现在refreshDisplay接受这些参数并创建该类别的项目列表并将其显示在内容片段中。refreshDisplay 有一个列表适配器和侦听器,单击时会打开DetailActivity。从DetailActivity我可以删除该项目和DetailActivity已经关了。我回到名单上。该列表仍显示已删除的项目。我想更新列表。