我有一个紧急问题。如果有人可以帮助我,我将不胜感激。
我有一个扩展活动的主要活动。它使用抽屉导航,如在android示例中。在滑动菜单上,我有一个章节列表。单击时,主要活动内的内容片段中将显示该章节的课程列表。
所以在主要活动中我有一个扩展Fragment的类。要设置片段的内容,它有这样的方法:
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);
getActivity().setTitle(category);
return rootView;
}
}
这是使用服装适配器填充listView的refreshDisplay方法:
public void refreshDisplay(Context context, View view, String category) {
List<Lesson> lessonByCategory = datasource.findByCategory(category);
ListView lv = (ListView) view.findViewById(R.id.listView);
ArrayAdapter<Lesson> adapter = new LessonListAdapter(context, lessonByCategory);
lv.setAdapter(adapter);
}
现在,我如何使用onListItemClick为所点击的项目的详细信息启动一个新的Activity?我有以下方法。但我不知道该把它放在哪里。当我在调用 refreshDisplay()之后放入Fragment但是它获得了点击的项目(章节)的位置是滑动菜单而不是列表里面的项目(课程)片段(我的内容片段)。
protected void onListItemClick(ListView l, View v, int position, long id) {
Log.i(LOGTAG, "onListItemClick call shod");
Lesson lesson = lessons.get(position);
Intent intent = new Intent(this, LessonDetailActivity.class);
intent.putExtra(".model.Lesson", lesson);
intent.putExtra("isStared", isStared);
startActivityForResult(intent, LESSON_DETAIL_ACTIVITY);
}
任何人都可以帮我理解如何解决这个问题吗? 我想要的是我有一个包含章节列表的滑动菜单。单击章节时,将显示与该章节相关的课程(到目前为止的工作)。然后,当单击课程时,将打开该课程详细信息的新活动。 (这是我的问题)
答案 0 :(得分:0)
在refreshDisplay()
方法中,将监听器添加到列表视图中,如下所示:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick (AdapterView<?> parent, View view, int position, long id) {
Log.i(LOGTAG, "onListItemClick call shod");
// 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);
// use this if you `refreshDisplay()` method is in your fragment
Intent intent = new Intent(getActivity(), LessonDetailActivity.class);
intent.putExtra(".model.Lesson", lesson);
intent.putExtra("isStared", isStared);
startActivityForResult(intent, LESSON_DETAIL_ACTIVITY);
}
}
或者您可以将代码从onListItemClick()
方法移至onItemClick()
编辑:
我添加了一个如何从适配器获取单击的Lesson
对象的示例。要使其工作,必须将适配器声明为成员变量。将MainActivity
替换为您的活动名称。