在 TabLayout 中以编程方式切换选项卡
Swiching tabs programally in TabLayout
我是 android 编程的新手,当用户单击位于 tab1 中的按钮时,我找不到在 TabLayout 中的 tab1 和 tab2 之间切换的方法。
这可能是很简单的事情,但我对我的第一个应用程序一无所知。
我首先尝试了以下方法:
TabLayout.Tab tab = tabLayout.getTabAt(1);
tab.select();
它曾经可以工作,但我更改了代码,在某些时候,它不再工作了。
我也试过tab.getCustomView().setSelected(true);
,但我得到了 NullPointerException。因此,如果 tab 为空,我检查了一个 if 语句,但事实并非如此。
然后我试了
tabLayout.setScrollPosition(1,0f,true);
ViewPager viewPager = new ViewPager(mainView.getContext());
viewPager.setCurrentItem(1);
但是上面的 none 解决方案对我有用。
这是我的代码:
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;
}
TabLayout
和ViewPager
属于你的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);
});
...
}
}
希望对您有所帮助!
尝试将这两行放在按钮的处理程序中:
ActionBar actionBar = (ActionBar)getActivity().getActionBar();
actionBar.setSelectedNavigationItem(1);
右击你的包名
新建 > activity > tabActivity 点击确定
随意选择布局名称,例如 (Example.java).
Select 导航样式是 Action Bar Tabs(选项 2)并单击 Finish
5.create 两个新片段
6.Go 到 java 文件 Example.java
- 打开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;
}
}
我是 android 编程的新手,当用户单击位于 tab1 中的按钮时,我找不到在 TabLayout 中的 tab1 和 tab2 之间切换的方法。
这可能是很简单的事情,但我对我的第一个应用程序一无所知。
我首先尝试了以下方法:
TabLayout.Tab tab = tabLayout.getTabAt(1);
tab.select();
它曾经可以工作,但我更改了代码,在某些时候,它不再工作了。
我也试过tab.getCustomView().setSelected(true);
,但我得到了 NullPointerException。因此,如果 tab 为空,我检查了一个 if 语句,但事实并非如此。
然后我试了
tabLayout.setScrollPosition(1,0f,true);
ViewPager viewPager = new ViewPager(mainView.getContext());
viewPager.setCurrentItem(1);
但是上面的 none 解决方案对我有用。
这是我的代码:
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;
}
TabLayout
和ViewPager
属于你的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);
});
...
}
}
希望对您有所帮助!
尝试将这两行放在按钮的处理程序中:
ActionBar actionBar = (ActionBar)getActivity().getActionBar();
actionBar.setSelectedNavigationItem(1);
右击你的包名
新建 > activity > tabActivity 点击确定
随意选择布局名称,例如 (Example.java).
Select 导航样式是 Action Bar Tabs(选项 2)并单击 Finish
5.create 两个新片段
6.Go 到 java 文件 Example.java
- 打开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;
}
}