我想要一个选项卡布局,其中每个选项卡上有两个片段,上面的一个显示通过在 3 个选项卡中输入完成的任务的进度,从开始到结束,另一个主要片段在该进度片段下方接受输入。
这使得每个选项卡中的标题和细节、标题片段和细节片段(每个选项卡上的输入片段不同)都相同!我尝试了所有方法两天:(
我的解决方案 我尝试了一个布局,其中包含两个用于从 ViewPager 添加到两个选项卡中的主要片段的框架布局,如下所示:
public static class ScreenSlidePagerAdapter extends
FragmentStatePagerAdapter {
public static ArrayList<Fragment> tabs_fragments = new ArrayList<Fragment>(
3);
public ScreenSlidePagerAdapter(FragmentManager fm,
ArrayList<Fragment> tabs) {
super(fm);
ScreenSlidePagerAdapter.tabs_fragments = tabs;
}
@Override
public Fragment getItem(int arg0) {
return tabs_fragments.get(arg0);
}
@Override
public int getCount() {
return tabs_fragments.size();
}
@Override
public int getItemPosition(Object object) {
if (tabs_fragments.contains(object)) {
return POSITION_UNCHANGED;
}
return POSITION_NONE;
}
public static void setItem(Fragment fr, int position) {
if (position <= 2 && position >= 0) {
tabs_fragments.remove(position);
tabs_fragments.add(position, fr);
} else
Log.d("adding tab", "wrong tab position to add fragment at");
}
}
在活动开始时,我执行此操作,请参阅我在主片段中使用的选项卡位置,用于加载不同选项卡位置的详细信息片段:
mPager = (ViewPager) findViewById(R.id.pager);
// fragments for pagers
ArrayList<Fragment> tabs = new ArrayList<Fragment>();
tabs.add(new FrEventDetails());
tabs.add(new FrEventDetails());
tabs.add(new FrRuleSave());
mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager(), tabs);
mPager.setAdapter(mPagerAdapter);
bar = getActionBar();
bar.setTitle("Add Rule");
bar.setSubtitle("select event for rule");
bar.setDisplayShowTitleEnabled(true);
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
bar.setDisplayHomeAsUpEnabled(true);
bar.addTab(bar.newTab().setText("Select Event")
.setTabListener(new TabListener(mPager)));
bar.addTab(bar.newTab().setText("Select Action")
.setTabListener(new TabListener(mPager)));
bar.addTab(bar.newTab().setText("Save Rule")
.setTabListener(new TabListener(mPager)));
if (savedInstanceState != null) {
bar.setSelectedNavigationItem(savedInstanceState.getInt("tab", 0));
}
mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// When swiping between pages, select the
// corresponding tab.
if (bar.getSelectedNavigationIndex() != position)
bar.setSelectedNavigationItem(position);
tab = position;
}
然后当这个片段附加到活动时,我添加了一个进度布局(标题(对于一个框架布局并基于选定的选项卡,为细节框架布局添加另一个片段(用于输入)。这里显示:
public class FrEventDetails extends Fragment {
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = (Context) activity;
int tab = AddRule1.tab;
android.app.FragmentTransaction ft = activity.getFragmentManager()
.beginTransaction();
ft.add(R.id.fr_rule_progress_container, new FrProgress());
if (tab == 1) {
ft.replace(R.id.fr_event_input_container, new FrActionSelect(),
"cell1_1").commit();
} else if (tab == 0) {
ft.replace(R.id.fr_event_action_container, new FrEventSelect(),
"cell1_2").commit();
}
}
此主要片段的NOTE*布局很简单,包含两个框架布局。
结果:它在第一个选项卡上漂亮地显示标题和细节,但在第二个选项卡上,只有主要片段,当我滑动到第三个片段并返回时,第二个片段被漂亮地填充(显示 1 秒后)但第一个片段现在是空的。我不明白该怎么办。
请给这两天泪流满面的问题一些解决方案