【问题标题】:How to replace a ViewPager with a Fragment如何用片段替换 ViewPager
【发布时间】:2013-08-28 18:06:31
【问题描述】:

我有以下布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >


<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</android.support.v4.view.ViewPager>

一切都很好,但我想用片段替换 ViewPager

getSupportFragmentManager().beginTransaction()
                .replace(R.id.view_pager, new CustomFragment())                 
                .commit();

这不是重新调整 ViewPager 我该怎么办???

【问题讨论】:

  • 文档说 - Replace an existing fragment that was added to a container. This is essentially the same as calling remove(Fragment) for all currently added fragments that were added with the same containerViewId and then add(int, Fragment, String) with the same arguments given here. 所以我假设你只能替换 Fragments 而不能替换其他视图。

标签: android android-fragments android-viewpager fragmenttransaction


【解决方案1】:

您可以创建一个 包含 ViewPager 的片段,然后替换该片段。

public class ViewPagerContainerFragment extends Fragment {

    private ViewPager mViewPager;

    public ViewPagerContainerFragment() {   }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

        View root = inflater.inflate(R.layout.view_pager_container_fragment, container, false);          

        // Set up the ViewPager, attaching the adapter and ...
        mViewPager = (ViewPager) root.findViewById(R.id.viewPager);

        // do other stuff...

        return root;
    }
}

view_pager_container_fragment.xml

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/rlMain"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewPager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"   
        />
</RelativeLayout>

您的活动 .xml 文件:

    <FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">       
        </FrameLayout>

然后像这样替换片段:

将 ViewPagerContainerFragment 添加到 Activity 布局中:

getSupportFragmentManager().beginTransaction()
                .replace(R.id.content_frame, new ViewPagerContainerFragment())                 
                .commit();

以及稍后在代码中的某处:(如果您想 - 将 ViewPagerFragment 替换为另一个 Fragment)

getSupportFragmentManager().beginTransaction()
                .replace(R.id.content_frame, new CustomFragment())                 
                .commit();

请确保您没有造成任何内存泄漏并正确设置您的适配器。

【讨论】:

  • 如果您尝试此解决方案,请注意导航返回行为。查看this question
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-18
相关资源
最近更新 更多