我的应用程序中有ActivityTwo
。打开ActivityTwo
时,我要用新的fragment替换其布局,并使用Tabs
设置了3个Viewpager
。
这是ActivityTwo
onCreate中的代码,用于在打开ActivityTwo时立即调用Fragment。
fm = getSupportFragmentManager();
String add = "";
ft = fm.beginTransaction();
ft.replace(R.id.frame, new ChooseTab(), add);
ft.commit();
从其他片段单击按钮时,我再次调用具有TabView
的同一个片段,但是这次我想将Tab位置设置为Second Tab。这是从另一个片段替换TabView片段的代码
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 Table ?");
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
freeSingleTable();
alertMsg.successMessage(infoTable,"Table Free Successfully.");
ChooseTab chooseTab=new ChooseTab();
tx = fm.beginTransaction();
tx.replace(R.id.frame,chooseTab);
tx.commitAllowingStateLoss();
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
alertDialog.dismiss();
}
});
builder.show();
}
});
这是ChooseTab Fragment的代码,其中有我的3个标签
public class ChooseTab extends Fragment {
// Tab Layout and ViewPager
TabLayout tabLayout;
ViewPager viewPager;
public ChooseTab() {
// Required empty public constructor
}
@Override
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);
tabLayout.addTab(tabLayout.newTab().setText("Men"));
tabLayout.addTab(tabLayout.newTab().setText("women"));
viewPager=(ViewPager)v.findViewById(R.id.simpleViewPager);
viewPager.setOffscreenPageLimit(2);
PagerAdapter adapter=new PagerAdapter(getActivity().getSupportFragmentManager(),tabLayout.getTabCount());
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@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());
}
});
return v;
}
}
在调用带有TabView的Fragment时如何将TabPosition设置为Second Tab?
答案 0 :(得分:4)
您可以将制表符位置作为参数传递给ChooseTab片段。
ChooseTab chooseTab=new ChooseTab();
Bundle bundle = new Bundle();
bundle.putInt("TAB_POSITION", yourTabPosition);
chooseTab.setArguments(bundle);
在ChooseTab片段中,使用
tabposition = getArguments().getInt("TAB_POSITION", 0);
viewPager.setCurrentItem(tabposition);
答案 1 :(得分:0)
尝试一下:
viewPager.setCurrentItem(x);
x =标签数。
答案 2 :(得分:0)
我不确定我是否理解你的问题。
您是否只想移至下一页?如果是这样,请使用viewPager.setCurrentItem(1)
转到第二页。
如果问题是您希望页面片段通知父片段该更改页面了,则可以使用EventBus(或其他类似的库)发布事件并通知父对象
-----编辑
好!因此,问题在于您想在片段之间进行通信。恕我直言,最简单的方法是使用EventBus。另外,您也可以创建这样的回调
public interface OnRequestAction {
void nextPage();
}
在ViewPagerFragment中实现此接口。
public class ViewPagerFragment extends Fragment implements OnRequestAction {
public void nextPage() {
int page = pager.getCurrentItem();
pager.setCurrentItem(++page);
}
}
在标签片段上执行以下操作
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mCallback = (OnRequestAction) getParentFragment();
}catch (ClassCastException e) {
throw new ClassCastException(context.toString()
+ " must implement OnRequestAction");
}
}
只要您想从标签片段中更改页面,只需调用mCallback.nextPage();