在下列情况下,有人能给我一些线索:
我有一个Android 3+应用程序,它包含一组来自 ActionBarActivity 的可互操作的软件。其中一个包含一组源自 Fragment 的片段,可由用户通过
选择getSupportFragmentManager().beginTransaction()
.replace(R.id.containerBase, FragmentX.getInstance(0))
.commit()
,其中
FragmentX extends Fragment {
public static FragmentX getInstance() {
FragmentX fragment = new FragmentX();
return fragment;
}
public FragmentX() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_x, container, false);
. . . . . . . .
return rootView;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
. . . . . . . .
}
}
所有片段(X,Y,Z等)都显示正常,我很高兴,直到有必要修改一些片段,以便它们可以有几个子页面,这些子页面应该由用户水平移动。其他碎片应保持不变。
哪些Android类可能是最佳选择,它们如何在我的应用程序中集成?
任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
需要具有“水平可转换子页面”的片段应该使用某种类型的ViewPager。您的用例并不完全清楚,但根据我的经验,ViewPager与另一组片段提供了一个很好且灵活的解决方案。此外,如果您的“子”片段(ViewPager中的片段)基本相同但显示不同的数据(例如一组事件详细信息片段),则此片段也可以重复使用。如果没有,您可以在ViewPager的switch
方法中使用public Fragment getItem(int position)
或类似内容。
您应该查看适合您需求的FragmentStatePagerAdapter,链接页面还有一个很好的详细示例,说明如何使用它。这里需要注意的一点是,由于您在片段中使用片段,因此包含ViewPager的片段需要使用getSupportChildFragmentManager
而不是常规getSupportFragmentManager
来显示这些片段。
答案 1 :(得分:0)
当然,我必须提供有关我的应用的更多详细信息。
public class BasePage extends ActionBarActivity implements NavigationBase.NavigationDrawerCallbacks {
private int mPage;
private NavigationBase mNavigationFragment;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
. . . . . . . .
setContentView(R.layout.activity_base);
mNavigationFragment = (NavigationBase) fragmentManager.findFragmentById(R.id.navigation_drawer);
mNavigationFragment.setUp(
R.id.navigation_drawer,
(DrawerLayout) findViewById(R.id.drawer_layout));
}
private void setPage() {
switch(mPage) {
case 1:
fragmentManager.beginTransaction()
.replace(R.id.containerBase, FragmentX.getInstance())
.commit();
break;
case 2:
fragmentManager.beginTransaction()
.replace(R.id.containerBase, FragmentY.getInstance())
.commit();
break;
}
}
}
activity_base 布局如下所示:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="app.BasePage">
<RelativeLayout
android:id="@+id/containerBase"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<fragment
android:id="@+id/navigation_drawer"
android:layout_width="@dimen/navigation_drawer_width"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="app.NavigationBase" />
</android.support.v4.widget.DrawerLayout>
用户通过设置 mPage 并调用 setPage()来浏览当前片段。
现在我需要修改片段X因此它有几个子页面,而片段Y必须保持不变。以编程方式,FragmentX和FragmentY类是相同的,它们只显示不同的用户内容。
我理解 ViewPager 在这种情况下必须是正确的解决方案。我的问题是我没有看到 where 在我当前的代码中构建 ViewPager ...