【问题标题】:options menu is calling for 2 fragments in view pager how to handle???选项菜单正在调用视图寻呼机中的 2 个片段如何处理???
【发布时间】:2014-03-04 19:36:16
【问题描述】:

我正在使用 viewpager 片段分页器适配器,它一次加载两个片段如何处理选项菜单一次调用两个片段

public class RTHomeTabFragment extends Fragment implements TabListener,OnBackButtonPressInterfaceForFragment{
            public ActionBarActivity parentActivity;
            private ActionBar actionBar;
            ViewPager mViewPager;
            public static int currentPage;



            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
                RTMessagingUtils.log(getClass().getName(), "onCreateView");
                View view = inflater.inflate(R.layout.viewpager_tabs, container,false);
                parentActivity = (ActionBarActivity) getActivity();
                actionBar = parentActivity.getSupportActionBar();
                mViewPager = (ViewPager) view.findViewById(R.id.pager);
            /*  actionBar.setDisplayShowTitleEnabled(false);
                actionBar.setDisplayShowHomeEnabled(false);*/
                actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
                actionBar.setCustomView(null);
                actionBar.removeAllTabs();
        //      List<Fragment> fragments  = getFragments();
                pagerAdapter adapter = new pagerAdapter(getChildFragmentManager(), getFragments());
                mViewPager.setAdapter(adapter);
                currentPage=mViewPager.getCurrentItem();
                Log.d("TestFragments", "currentPage======"+currentPage);
                mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) {
                        actionBar.setSelectedNavigationItem(position);
                          currentPage=mViewPager.getCurrentItem();
                          Fragment fragment=getFragments().get(position);
                          fragment.setHasOptionsMenu(true);
                            Log.d("TestFragments", "currentPage======"+currentPage);
                    }
                });


                for (int i = 0; i < adapter.getCount(); i++) {
                    actionBar.addTab(actionBar.newTab().setText(adapter.getPageTitle(i)).setTabListener(this));
                }

                return view;
            }

            private List<Fragment> getFragments(){
                List<Fragment> fList = new ArrayList<Fragment>();
        //        add fragments here
                fList.add(new Test1());
                fList.add(new Test2());
                fList.add(new Test3());
                return fList;
            }

            class pagerAdapter extends FragmentPagerAdapter{

                private List<Fragment> fragments;

                public pagerAdapter(FragmentManager fm, List<Fragment> fragments){
                    super(fm);
                    this.fragments = fragments;
                }

                @Override
                public Fragment getItem(int position) {
                    return this.fragments.get(position);
                }

                @Override
                public int getCount() {
                    return this.fragments.size();
                }

                @Override
                public CharSequence getPageTitle(int position) {
                    Locale l = Locale.getDefault();
                    switch (position) {
                    case 0:

                        return getString(R.string.db_jio_chat_chats).toUpperCase(l);

                    case 1:
                        return getString(R.string.db_jio_chat_groups).toUpperCase(l);
                    case 2:
                        return getString(R.string.db_jio_chat_contacts).toUpperCase(l);
                    /*case 3:
                        return getString(R.string.db_jio_chat_my_profile).toUpperCase(l);
                    case 4:
                        return getString(R.string.db_jio_chat_location).toUpperCase(l);
                    case 5:
                        return getString(R.string.db_jio_chat_about).toUpperCase(l);*/
                    }
                    return null;
                }

            }

            @Override
            public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
                // TODO Auto-generated method stub

            }
            @Override
            public void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
        //        setHasOptionsMenu(true);
                super.onCreate(savedInstanceState);
            }
            @Override
            public void onTabSelected(Tab arg0, FragmentTransaction arg1) {
                // TODO Auto-generated method stub
                mViewPager.setCurrentItem(arg0.getPosition());
            }

            @Override
            public void onTabUnselected(Tab arg0, FragmentTransaction arg1) {
                // TODO Auto-generated method stub

            }
            @Override
            public void onResume() {
                super.onResume();
                RTMessagingUtils.log(getClass().getName(), "onResume");
            }
            @Override
            public void onPause() {
                super.onPause();
                RTMessagingUtils.log(getClass().getName(), "onPause");

            }




    }

片段1

public class Test1 extends Fragment {

    private ListView listView;
    public ActionBarActivity parentActivity;
    ArrayList<String> list = new ArrayList<String>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.userlist, container, false);
        listView = (ListView) view.findViewById(R.id.listView1);

        parentActivity = (ActionBarActivity) getActivity();
        final ActionBar actionBar = parentActivity.getSupportActionBar();
         actionBar.setIcon(R.drawable.ic_launcher);
         actionBar.setTitle("UserList");
         actionBar.setSubtitle(null);

        list.add("Android");
        list.add("Android");
        list.add("Android");
        list.add("Android");
        list.add("Android");
        list.add("Android");
        list.add("Android");
        list.add("Android");
        list.add("Android");
        list.add("Android");
        list.add("Android");
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);

        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                Test2 test2 = new Test2();

//              ((MainActivity) parentActivity).replaceFragment(test2, "chat");
            }
        });
        return view;

    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onViewCreated(view, savedInstanceState);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        setHasOptionsMenu(true);
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        Log.d("Test1", "******************onCreateOptionsMenu****************");
        super.onCreateOptionsMenu(menu, inflater);
    }
}

片段2

public class Test2 extends Fragment {
    public ActionBarActivity parentActivity;
    private ListView listView;
    ArrayList<String> list = new ArrayList<String>();
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        parentActivity = (ActionBarActivity) getActivity();
          final ActionBar actionBar = parentActivity.getSupportActionBar();
//        actionBar.setIcon(R.drawable.jio_chat_myprofile_add_contact);
          actionBar.setTitle("user namednfjgnlxnclkvbnxc");
          actionBar.setSubtitle("user status");
          View view = inflater.inflate(R.layout.conversation, container, false);
            listView = (ListView) view.findViewById(R.id.listView1);
            list.add("Android");
            list.add("converstion");
            list.add("converstion");
            list.add("converstion");
            list.add("converstion");
            list.add("converstion");
            list.add("converstion");
            list.add("converstion");
            list.add("converstion");
            list.add("converstion");
            list.add("converstion");
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
                    android.R.layout.simple_list_item_1, list);
            listView.setAdapter(adapter);

        return view;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
          setHasOptionsMenu(true);
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        // TODO Auto-generated method stub
        super.onCreateOptionsMenu(menu, inflater);
        menu.clear();
        getActivity().getMenuInflater().inflate(R.menu.new_message_menu, menu);
    }
}

【问题讨论】:

  • 两个片段需要一个菜单​​还是两个片段需要单独的菜单?
  • 谢谢,我需要单独的菜单

标签: android android-fragments android-viewpager android-optionsmenu


【解决方案1】:

要在单独的片段中拥有单独的菜单,您只需使用

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    menu.clear();
    getActivity().getMenuInflater().inflate(R.menu.new_message_menu, menu);
}

在片段中而不是在父活动中

【讨论】:

  • 我做了同样的事情,但视图寻呼机同时膨胀了两个片段,因此一次为两个片段调用选项菜单
  • 如果您将在每个片段中重写此方法,那么您将得到您需要的东西,还可以尝试扩充不同的菜单资源 -> 尝试创建两个 *.xml 文件并在您的片段中分别扩充它们。
  • 谢谢,它工作正常,但是当我更改视图寻呼机片段时,菜单项消失了。
  • 我认为这只是滞后,因为我建议您的解决方案我自己检查了很多次
  • 当我尝试加载重碎片时,它适用于轻量碎片,菜单项正在消失
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多