Android:在片段内滑动

时间:2014-07-21 17:51:20

标签: android android-fragments

在下列情况下,有人能给我一些线索:

我有一个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类可能是最佳选择,它们如何在我的应用程序中集成?

任何帮助都将受到高度赞赏。

2 个答案:

答案 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 ...