在 viewpager 中显示列表视图项的上下文菜单

Posted

技术标签:

【中文标题】在 viewpager 中显示列表视图项的上下文菜单【英文标题】:Show context menu for listview item inside viewpager 【发布时间】:2016-03-05 01:42:53 【问题描述】:

你好,我有一个带有滑动标签的活动,一个 viewpager,在 viewpager 内我以编程方式添加 Listviews

myVp = (android.support.v4.view.ViewPager) findViewById(R.id.mainviewpager);
        myVp.setClickable(false);
        pages = new Vector<View>();
        int i = 0;
        for (LinkedList<Channel> cEvent : pagine) 
            final ListView mList = new ListView(this);
            mList.setDividerHeight(5);
            pages.add(i, mList);
            i++;
        
        CustomMainPagerAdapter adapter = new CustomMainPagerAdapter(this, pages, mGruppi);
        myVp.setPageTransformer(true, new ZoomOutPageTransformer());
        myVp.setAdapter(adapter);
        int j = 0;
        for (LinkedList<Channel> cEvent : pagine) 
            CustomAdapter mCadapter = new CustomAdapter(this, R.layout.line_item, cEvent);
            final ListView mV = (ListView) pages.get(j);
            mV.setAdapter(mCadapter);
            registerForContextMenu(mV);
            mV.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() 
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long arg3) 
                    if (showMenu) 
                        mV.showContextMenuForChild(view);
                     else 
                        Channel cPlay = (Channel) mV.getItemAtPosition(position);
                        String file = cPlay.getmLink();
                        if (!file.equalsIgnoreCase("NONE")) 
                            sendLink(file);
                        
                
            );
            j++;
        
        adapter.notifyDataSetChanged();
        mSlidingTabLayout.setDistributeEvenly(true);
        mSlidingTabLayout.setViewPager(myVp);

问题是当我单击该项目时,上下文菜单不显示,如果 showMenu 为 true,但如果 showMenu 为 false,则其他功能有效。 所以“OnItemClickListener”似乎没有问题,因为它被正确调用了,但问题是“showContextMenuForChild”。

我做错了什么或错过了什么?

谢谢

【问题讨论】:

showContextMenuForChild 有什么问题? 它不弹出菜单:-( 有一个拼写错误的单词,当我点击列表视图项时菜单不显示 在哪里将showMenu 的值改为true? 这是我从首选项中获得的值,因此该值具有正确的值,在 dbug 模式下我看到代码运行良好,但 showContextMenuForChild 什么都做! 【参考方案1】:

知道了! 我将主要活动从单个列表视图更改为具有更多列表视图的视图分页器,并检查我在“onCreateContextMenu”上看到的代码,我制作了一个过滤器来检查列表视图是否是主要视图,因此删除“if”构造函数现在一切正常工作正常! 之前是

if (v.getId() == R.id.mylist) 
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu_channel, menu);

这就是为什么在新的列表视图中没有创建上下文菜单!

谢谢

【讨论】:

现在问题出在“onContextItemSelected(MenuItem item)”上,如何从该项目中获取正确的列表视图?我的意思是,现在我选择了 i 菜单项,但是如何从所选视图中获取父项?【参考方案2】:

也解决了这个问题:-) 在我的代码上:

if (showMenu) 
                    mV.showContextMenuForChild(view);
                 else 
                    Channel cPlay = (Channel) mV.getItemAtPosition(position);
                    String file = cPlay.getmLink();
                    if (!file.equalsIgnoreCase("NONE")) 
                        sendLink(file);
                    

我添加了这个:

myList = mList; 

myList 是一个全局 ListView,因此每次单击一个项目时,我将其设置为单击的当前 lisview,并且我希望我需要在“onContextItemSelected”上 通过做

AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
selectpos = info.position; // position in the adapter
                Channel mChannel = (Channel) myList.getItemAtPosition(selectpos);

:-)

【讨论】:

以上是关于在 viewpager 中显示列表视图项的上下文菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个列表视图中显示其各自组项的子项

如何在不禁用列表项的命中测试的情况下启用对列表项的选择?

根据所选列表视图项的位置设置铃声

仅显示一项的列表视图

从列表视图中检索数据并将其显示在文本视图/图像视图中

使用viewpager的片段事务返回空白视图