java - 带有 ContextMenu 的 ViewPager 每个 View 都不同

标签 java android contextmenu android-viewpager

我有一个包含两个 View 的 ViewPagerActivity。我想注册一个上下文菜单,每个 View 都不同。我尝试了一些操作 (registerForContextMenu()),但我总是以两个 View 的行为都像第二个 View 结束。有什么想法吗?

public class ViewPagerActivity extends UomeActivity {

    private ViewPager viewPager;        
    private ViewPagerAdapter viewPagerAdapter;
    private ListAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_pager);

        refreshAdapter();
    }

    private class ViewPagerAdapter extends PagerAdapter {

        private final List<Transaction> accountTransactions;
        private final List<User> accountUsers;

        public ViewPagerAdapter() {
            // initialize lists
        }

        @Override
        public Object instantiateItem(View collection, int viewPosition) {
            View layout;
            ListView listView;
            switch (viewPosition) {
                case 0:
                    layout = LayoutInflater.from(getApplicationContext()).inflate(
                            R.layout.list_account_paired_transactions, null);

                    List<PairedTransaction> pairedTransactions = getPairedTransactions();

                    adapter = new AccountPairedTransactionItemAdapter(ViewPagerActivity.this,
                            R.layout.list_account_paired_transactions, pairedTransactions);

                    listView = (ListView) layout.findViewById(android.R.id.list);
                    listView.setOnItemClickListener(new OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
                            // do something
                        }
                    });
                    registerForContextMenu(listView);
                    break;
                case 1:
                    layout = LayoutInflater.from(getApplicationContext()).inflate(
                            R.layout.list_account_transactions, null);
                    initViewPagerInfo(layout, R.string.paired_transactions,
                            R.string.all_account_transactions, R.string.empty, viewPosition);

                    adapter = new TransactionItemAdapter(ViewPagerActivity.this,
                            R.layout.list_account_transactions, accountTransactions,
                            new UserDaoImpl(
                                    getApplicationContext()));

                    listView = (ListView) layout.findViewById(android.R.id.list);
                    registerForContextMenu(listView);
                    break;
                default:
                    throw new IllegalArgumentException("Unsupported number of views.");
            }

            listView.setAdapter(adapter);
            listView.setDivider(new ColorDrawable(R.color.list_separator));
            listView.setDividerHeight(1);
            listView.setBackgroundColor(Color.WHITE);
            listView.setCacheColorHint(Color.WHITE);
            ((ViewPager) collection).addView(layout);

            return layout;
        }

        // omitted

    }

    @Override
    protected void onResume() {
        refreshAdapter();
        super.onResume();
    }

    private void refreshAdapter() {
        viewPagerAdapter = new ViewPagerAdapter();
        viewPager = findById(R.id.view_pager);
        viewPager.setAdapter(viewPagerAdapter);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
        menu.add(R.string.show_info);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO: toast which object has been selected
    }

}

最佳答案

问题是两个 View 是同时实例化的(填充 viewpager)。在第二个 View 中设置 onRegisterForContextMenu 会覆盖第一个 View 中的它。

一个可能的解决方案是检查您的 onContextItemSelected 方法中可见的 View 。

关于java - 带有 ContextMenu 的 ViewPager 每个 View 都不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10429473/

相关文章:

java - 有没有办法从 System.out.println 触发触发器?

java - (Gridbag 布局)图形组件被剪切到另一个网格中,不知道为什么

java - 整数 null 以检查数据库

android - 使用以下代码无法进行调用转移

java - 使用 Apache Axis 和 WS-Security 的 WebService 客户端。未找到用户名安全 token

java - 如何触发 MINA 客户端消息事件?

c# - Wpf - TabItem 标题中的上下文菜单

java - 从 GridView 发起的 ContextMenu

android - ConstraintLayout 中的 CardView 未环绕高度

javascript - Chrome 扩展上下文菜单不存在