以编程方式在TabLayout中夹住标签页

时间:2018-07-16 02:13:02

标签: java android android-tablayout

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

可能很简单,但是我在第一个应用程序中一无所知。

首先,我尝试了以下方法:

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

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

我也尝试过tab.getCustomView().setSelected(true);,但遇到了NullPointerException。因此,我检查了if语句是否 tab 为null,但不是。

然后我尝试了

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;
}

3 个答案:

答案 0 :(得分:2)

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);
        });

        ...
    }
}

希望获得帮助!

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

  1. 右键单击您的包裹名称

  2. 新建>活动> tabActivity,单击“确定”

  3. 根据需要选择布局名称,例如(Example.java)。

  4. 选择导航样式为“操作栏选项卡”(这是选项2),然后单击“完成”

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;
    }
}