【问题标题】:Set Tab Position in Tab View of Fragment from another Fragment从另一个 Fragment 在 Fragment 的选项卡视图中设置选项卡位置
【发布时间】:2018-07-17 06:51:59
【问题描述】:

我的Home 片段中有两个Tab,使用。当ActivityTwo 打开时,我调用我的Home 片段。在家庭片段中,我有一个FloatingButton,单击时我会转到Information Fragment.When button is clicked in Information Fragment 我来到Home Fragment,我需要打开第二个选项卡。如何实现这个?
这是设置 TabView 的代码

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
            View v=inflater.inflate(R.layout.choose_tab, container, false);
        //-----------------------------------------------------------------------------------
            tabLayout=(TabLayout)v.findViewById(R.id.simpleTabLayout);
            viewPager=(ViewPager)v.findViewById(R.id.simpleViewPager);
             viewPager.setOffscreenPageLimit(2);
            tabLayout.addTab(tabLayout.newTab().setText("One"));
            tabLayout.addTab(tabLayout.newTab().setText("Two"));
          PagerAdapter adapter=new PagerAdapter(getActivity().getSupportFragmentManager(),tabLayout.getTabCount());
            //PagerAdapter adapter=new PagerAdapter(getChildFragmentManager(),tabLayout.getTabCount());
            viewPager.setAdapter(adapter);
            tabLayout.addOnTabSelectedListener(this);
            viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
            return v;
    }

    @Override
    public void onTabSelected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(TabLayout.Tab tab) {
    }

    @Override
    public void onTabReselected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition());
    }  

这是替换Home片段的代码

freeTable.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                builder.setTitle("Confirmation.");
                builder.setMessage("Are you sure to Free this Person?");
                builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        alertDialog.dismiss();
                        freeSinglePerson();
                        alertMsg.successMessage(infoTable,"Person Free Successfully.");
                        Home home=new Home();
                        tx = fm.beginTransaction();
                        tx.replace(R.id.frame,home);
                        vp.setCurrentItem(1);
                        tx.commitAllowingStateLoss();

                    }
                });  

当我的Home Fragment 被替换时,我想设置第二个选项卡。如何实现?

【问题讨论】:

  • 你试过这个 tabLayout.getTabAt(yourTabIndex).select();
  • 如何在那个 Fagment 中得到那个 TabLayout ?
  • 来自您的标签布局活动
  • 但是我已经在 Fragment 中设置了 TabLayout。所以我得到了 null ?
  • 您在 Activity 或 Fragment 中的选项卡布局

标签: viewpager android android-fragments android-viewpager android-tablayout


【解决方案1】:

尝试以下代码从 Activity 获取选项卡布局

public TabLayout yourPublicMethodToGetTabLayout(){ // inside activity
 return tabLayout;
}
TabLayout tabview=    ((YourActivityClassName)getActivity()).yourPublicMethodToGetTabLayout(); //inside fragment

然后设置tab位置

new Handler().postDelayed(
    new Runnable(){
        @Override
        public void run() {
            tabview.getTabAt(yourTabIndex).select();
        }
}, 100);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2023-03-12
    • 2017-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多