簡體   English   中英

在父活動中訪問片段viewPager

[英]Access Fragment viewPager in Parent Activity

我的應用程序中有問題,我在活動中加載了一個片段,在該片段中,我使用了ViewPager(用於TabLayout),因此我想處理ViewPager的BackPressed。 因為片段中沒有可用的OnKeyDown override method ,所以我希望在我的父級活動中onBackPressed() method我的Fragment ViewPager,以便我可以在onBackPressed() method Activity中處理這種情況。

活動代碼:

fragment= new TabFragment();
if (fragment != null) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.replace(R.id.containerView, fragment);
        ft.commitAllowingStateLoss();
       // ft.commit();
    }
@Override
public void onBackPressed() {

if (isMainShown) {
   // want the refrence of view pager so i can handle ViewPager on backPress

    }
else {

   //display tab fragment
}
    //super.onBackPressed();
}

TabFragment:

public class TabFragment extends Fragment {


public TabFragment() {
    // Required empty public constructor
}
public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 2 ; View x;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    x=inflater.inflate(R.layout.content_main_menu,null);
    tabLayout=(TabLayout) x.findViewById(R.id.tabs);
    viewPager =(ViewPager) x.findViewById(R.id.viewpager);
    setupViewPager(viewPager);
    //viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
    viewPager.setOffscreenPageLimit(1);
    tabLayout.post(new Runnable() {
        @Override
        public void run() {
            tabLayout.setupWithViewPager(viewPager);
        }
    });
return x;
}

@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onDetach() {
    super.onDetach();

    try {
        Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
        childFragmentManager.setAccessible(true);
        childFragmentManager.set(this, null);

    } catch (NoSuchFieldException | IllegalAccessException e) {
        throw new RuntimeException(e);
    }
}



private void setupViewPager(ViewPager viewPager) {
    MyAdapter adapter = new MyAdapter(getChildFragmentManager());
    adapter.addFragment(new TabOne(), "TAb1");
    adapter.addFragment(new TabTwo(), "Tab2");

    viewPager.setAdapter(adapter);

    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            final InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(x.getWindowToken(), 0);
        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });
}


private class MyAdapter extends FragmentPagerAdapter{
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();
    public MyAdapter(FragmentManager fm) {
        super(fm);
    }

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

    @Override
    public int getCount() {
        return mFragmentList.size();
    }
    void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

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


    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        return super.instantiateItem(container, position);
    }
}


}......

將此代碼添加到您的onBackPressed()

fragobjTab = (TabFragment) getSupportFragmentManager().findFragmentById(R.id.containerView);
        try {
            fragobjTab.onBackPressed();

        }catch (Exception e){
            e.printStackTrace();
        }

然后在tabFragment中創建一個onBackPressed方法,並將CurrentItem設置為ViewPager:

 public void onBackPressed()
{
    // set page to your viewPager
    // 0 is your first viewpager fragment
    viewPager.setCurrentItem(0,true);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM