【问题标题】:onListItemClick in a fragment片段中的 onListItemClick
【发布时间】:2013-09-20 21:01:48
【问题描述】:

我有一个扩展 Activity 的 Main Activity。它使用类似于 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);

}

我该如何解决这个问题?我想要的是我有一个包含章节列表的滑动菜单。单击一章时,将显示与该章相关的课程(到目前为止有效)。然后当点击一堂课时,会打开该课的详细信息的新活动(这是我的问题)。

【问题讨论】:

    标签: android fragment onitemclicklistener onitemclick


    【解决方案1】:

    在您的 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 替换为您的活动名称。

    【讨论】:

    • 非常感谢。我按照你说的添加了代码(只需将 lv 更改为 final)。现在,当我单击项目时,它会启动 DetailActivity。但我无法访问滑入式导航菜单。我必须回击才能进入主要活动并使用滑入式导航菜单。有没有办法在内容片段中启动 DetailActivty,以便我的滑入式菜单始终有效?或以其他方式。
    • 不,新活动需要自己设置操作栏。要执行您所描述的操作,最好使用细节片段而不是细节活动。
    • 如果这回答了您的问题,您介意将其标记为答案吗(单击答案左侧的复选标记)?这有助于其他有类似问题的人。
    • 如果我使用细节片段,那么我应该从 refreshDisplay() 方法启动它吗?我必须使用片段管理器吗?
    • 是的,您应该在当前开始新活动的同一位置开始它。您可以尝试以与显示您已有的列表片段相同的方式显示它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多