小编Orc*_*666的帖子

Fragment中的Context菜单使用来自不同Fragment的ListView:registerForContextMenu(getListView())

我试过寻找解决方案,但没有发现任何符合我情况的解决方案.我有一个MainActivity,它扩展了FragmentActivity和多个ListFragments.我使用PagerSlidingTabStrip库作为slidetabs和一个ViewPager.片段没有XML布局,它们只是ListFragments,它返回ListView,因此不需要布局.

它是一个音板应用程序,长按一个列表项,允许用户将声音文件设置为铃声,通知或警报,或保存到SD卡.

现在,所有片段加载自己的数据就好了.一切似乎都没问题,但是,当我在后台加载的Fragment上使用上下文菜单时,似乎是使用了在它之前加载的第一个或前一个片段中的ListView,它是在创建它时可见的.

我的意思是,说我的MainActivity开始,它加载FragmentA,并在后台FragmentB也被预加载.

在onActivityCreated方法中,对于两个Fragments,它使用registerForContextMenu(getListView()).

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    // Data loading etc

    MyAdapter adapter = new MyAdapter(getActivity(),
            R.layout.data_row, data);
    setListAdapter(adapter);

    registerForContextMenu(getListView());
}
Run Code Online (Sandbox Code Playgroud)

但似乎正在发生的事情是FragmentB调用了registerForContextMenu(getListView()),它似乎采用了当前活动的ListView,这是FragmentA的列表.

所以,假设我选择从上下文菜单中保存文件.我长按了FragmentB的第一项,但它试图保存FragmentA的第一项.如果我只是点击列表项,它会像您期望的那样播放它自己的声音,但是上下文菜单命令使用预加载时可见的片段列表.

这是onCreateContextMenu.注意,此时它使用上下文菜单Title中的正确项Title.

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle(data.get(info.position).getDataName());
    MenuInflater inflater = this.getActivity().getMenuInflater();
    inflater.inflate(R.menu.context_menu, menu);
}
Run Code Online (Sandbox Code Playgroud)

这是onContextItemSelected.

@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
    int dataID = data.get(info.position).getDataID();
    String dataName = data.get(info.position).getDataName();

    Activity activity = getActivity();
    if(activity instanceof …
Run Code Online (Sandbox Code Playgroud)

android listview contextmenu fragment android-fragments

9
推荐指数
1
解决办法
7664
查看次数