ViewPager with ContextMenu, which is different for each view

I have ViewPagerActivitywith two views. I want to register a context menu, another for each view. I tried a few things ( registerForContextMenu()), but I always got both views that behave like the second. Any ideas?

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
    }

}
+3
source share
1 answer

The problem is that both views are created at the same time (filling the viewer). The setting onRegisterForContextMenuin the second view overwrites it from the first view.

A possible solution is to check to see which view is visible in your method onContextItemSelected.

+2
source

All Articles