【问题标题】:Swiching tabs programally in TabLayout在 TabLayout 中以编程方式切换选项卡
【发布时间】:2018-07-16 11:46:53
【问题描述】:

我是 android 编程新手,当用户单击位于 tab1 中的按钮时,我找不到在 TabLayout 中的 tab1 和 tab2 之间切换的方法。

这可能是非常简单的事情,但我对我的第一个应用程序一无所知。

我一开始尝试了以下方法:

TabLayout.Tab tab = tabLayout.getTabAt(1);
tab.select();

它曾经可以工作,但我更改了代码,在某些时候,它就不再工作了。

我也试过tab.getCustomView().setSelected(true);,但我得到了 NullPointerException。所以我检查了一个 if 语句,如果 tab 为空,但它不是。

然后我尝试了

tabLayout.setScrollPosition(1,0f,true);
ViewPager viewPager = new ViewPager(mainView.getContext());
viewPager.setCurrentItem(1);

但上述解决方案均不适合我。

这是我的代码:

View view;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    try {
        view = inflater.inflate(R.layout.fragment_main, container, false);
        Button GoB = view.findViewById(R.id.GoB);
        final EditText USETV = view.findViewById(R.id.USETV);
        final EditText commandEV = view.findViewById(R.id.CommandTV);
        final SqlHelper db = new SqlHelper(getContext(), "myDatabase", null, 1);
        GoB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    String a = "";
                    if (USETV.getText().toString().length() > 0) {
                        a += "USE " + USETV.getText().toString() + " ;";
                    }
                    a += commandEV.getText().toString();
                    String[][] c = db.SqlQuery(a);
                    LayoutInflater factory = getLayoutInflater();
                    View resultView = factory.inflate(R.layout.fragment_result, null);
                    TableLayout tableLayout = resultView.findViewById(R.id.ResultContainer);
                    tableLayout.removeAllViews();
                    View mainView = factory.inflate(R.layout.main_activity,null);
                    TabLayout tabLayout = mainView.findViewById(R.id.tabs);
                    if (c[0].length > 0 && c[1].length > 0) {
                        TabLayout.Tab tab = tabLayout.getTabAt(1);
                        //tab.select();
                        //tab.getCustomView().setSelected(true);
                        //tabLayout.setScrollPosition(1,0f,true);
                        //ViewPager viewPager = new ViewPager(mainView.getContext());
                        //viewPager.setCurrentItem(1);
                        //
                        // do some stuff
                    }
                } catch (Exception e) {
                    showException(e);
                }
            }
        });
    } catch (Exception e) {
        showException(e);
    }
    return view;
}

【问题讨论】:

    标签: java android android-tablayout


    【解决方案1】:

    TabLayoutViewPager 属于你的Activity,所以在你的Fragment 中你必须调用Activity 函数来切换标签

    这是一个例子:

    public class MyActivity extends Activity {
        private TabLayout mTabLayout;
        private ViewPager mViewPager;
    
        @Override
        public onCreate(...) {
            MyFrament myFragment = new MyFragment(this);
            // Add fragment to Viewpager ...
            // Attach ViewPager to TabLayout ...
        }
    
        public void switchTab(int index) {
            // Check index ...
            mViewPager.setCurrentItem(index);
        }
    }
    

    然后

    public class MyFragment extends Fragment {
        private Context mContext;
        private Button mButton;
    
        public MyFragment(Context context) {
            mContext = context;
        }
    
        @Override
        public View onCreateView(...) {
            ...
    
            mButton.setOnClickListener(v->{
                ((MyActivity)mContext).switchTab(1);
            });
    
            ...
        }
    }
    

    希望对您有所帮助!

    【讨论】:

    • 非常感谢。但 mContext 不可见。所以我使用了 getContext() 并且一切就绪。
    【解决方案2】:

    尝试将这两行放在按钮的处理程序中:

    ActionBar actionBar = (ActionBar)getActivity().getActionBar();
    actionBar.setSelectedNavigationItem(1);
    

    【讨论】:

    • 我没有机会测试您的解决方案,因为我在 android 文档中看到 ActionBar 在 android.support.v7 中并且我正在寻找兼容性。
    【解决方案3】:
    1. 右击你的包名

    2. 新建>活动>tabActivity点击确定

    3. 选择任何你想要的布局名称,例如(Example.java)。

    4. 选择 Navigation style 是 Action Bar Tabs(这是选项 2),然后单击 Finish

    5.创建两个新片段

    6.到这里的java文件Example.java

    1. 打开 Example.java 文件后,将代码粘贴到

    SectionsPagerAdapter 扩展了 FragmentPagerAdapter

    public SectionsPagerAdapter(FragmentManager fm) {

            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
    
            // getItem is called to instantiate the fragment for the given page.
    
            // Return a PlaceholderFragment (defined as a static inner class below).
    
            switch(position){
    
    
                case 0:
    
                    return new Chats();
    
                case 1:
    
                    return new Status();
    
                case 2:
    
                    return new Call();
            }
    
            return PlaceholderFragment.newInstance(position + 1);
        }
    
        @Override
    
        public int getCount() {
    
            // Show 3 total pages.
    
            return 3;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多