Android-每次我从碎片切换时都要做些什么

Android-每次我从碎片切换时都要做些什么,android,android-fragments,Android,Android Fragments,我有一个活动有两个片段。活动有一个自定义工具栏,屏幕上的剩余空间由片段使用(一次一个)。在该工具栏中有一个SearchView.OnQueryTextListener,但该搜索应始终在片段1中可用,而对于片段2,如果该搜索应仅在满足条件时可用。所以我需要的是一种检查的方法,每次我从片段切换到哪个片段,如果它现在占据了屏幕,如果它是片段,我将searchView设置为可用,对于片段2,searchView只有在满足条件时才可用 这是我的活动: public class ActivityTeams

我有一个活动有两个片段。活动有一个自定义工具栏,屏幕上的剩余空间由片段使用(一次一个)。在该工具栏中有一个
SearchView.OnQueryTextListener
,但该搜索应始终在片段1中可用,而对于片段2,如果该搜索应仅在满足条件时可用。所以我需要的是一种检查的方法,每次我从片段切换到哪个片段,如果它现在占据了屏幕,如果它是片段,我将searchView设置为可用,对于片段2,searchView只有在满足条件时才可用

这是我的活动:

public class ActivityTeams extends BaseActivity implements SearchView.OnQueryTextListener {

    public ActivityTeams(){
        super(R.layout.activity_teams);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        token = SharedPrefsHelper.getString(getApplicationContext(), Constants.TOKEN);
        listview = (ListView) findViewById(R.id.listview);
        listview.setVisibility(View.INVISIBLE);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
        appBarLayout = (AppBarLayout) findViewById(R.id.appBarLayout);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new InternsFragment(), getResources().getString(R.string.team_internal));
        adapter.addFragment(new ExternsFragment(), getResources().getString(R.string.team_external));
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

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

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

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }

    @Override
    protected void initToolbar() {
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        if(toolbar!=null) {
            if (user_type == 1) {
                toolbar.setTitle(R.string.collaborators_title);
            } else if (user_type == 2) {
                toolbar.setTitle(R.string.admin_title);
            }
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            toolbar.setNavigationIcon(R.drawable.ic_action_back_black);
            toolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    onBackPressed();
                }
            });
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_search_team, menu);

        SearchManager searchManager = (SearchManager)
                getSystemService(Context.SEARCH_SERVICE);
        searchMenuItem = menu.findItem(R.id.search);

        searchView = (SearchView) searchMenuItem.getActionView();
        ImageView searchSubmit = (ImageView) searchView.findViewById (android.support.v7.appcompat.R.id.search_go_btn);
        searchSubmit.setImageResource(R.drawable.ic_dots_w);

        searchSubmit.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                //Clear query
                searchView.setQuery("", false);
                //Collapse the action view
                searchView.onActionViewCollapsed();
                //Collapse the search widget
                searchMenuItem.collapseActionView();

                listview.setVisibility(View.GONE);

                viewPager.bringToFront();

                appBarLayout.setVisibility(View.VISIBLE);
            }
        });

        for (TextView textView : findChildrenByClass(searchView, TextView.class)) {
            textView.setTextColor(Color.BLACK);
            textView.setHintTextColor(Color.BLACK);
        }

        searchView.setSearchableInfo(searchManager.
                getSearchableInfo(getComponentName()));
        searchView.setSubmitButtonEnabled(true);
        searchView.setOnQueryTextListener(this);

        return true;
    }
这是片段2:

public class ExternsFragment extends Fragment {

    public ExternsFragment() {
        // Required empty public constructor
    }

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

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_externs, container, false);

        return rootView;
    }

searchMenuItem
在我的活动中,我想根据可见的片段更改可见性。

使用
ViewPager.OnPageChangeListener
并在其内部使用
InvalidateOptions功能表()
,如下所示:

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
         currentFragment = position // use a field to store position
        invalidateOptionsMenu();
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

            }
        }
    });

然后根据位置,在
onprepareOptions功能表中设置菜单。您需要在非活动的片段中处理选项菜单。您可以尝试使用
ViewPager.OnPageChangeListener
谢谢您的回复,如何使用
ViewPager.OnPageChangeListener
?你有什么例子吗?哎呀!您应该改用
ViewPager.addOnPageChangeListener
。我会更新的,它就像一个符咒!非常感谢你!我只有一个问题,
setOnPageChangeListener
似乎不受欢迎。有别的方法吗?
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
         currentFragment = position // use a field to store position
        invalidateOptionsMenu();
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

            }
        }
    });