【问题标题】:Viewpageindicator inside fragment片段内的 Viewpagerindicator
【发布时间】:2012-03-14 10:14:11
【问题描述】:

通过 SherlockActionBar,我创建了一个不错的界面。在横向模式下,您会同时看到 listfragment 和“detailsfragment”。

现在我想在 detailsframe 中添加一个 viewpageindicator (https://github.com/JakeWharton/Android-ViewPagerIndicator),所以我看起来像这样:

--------------------------|
|_1___|TAB1 | TAB2 | ETC  |
|_2___|-------------------|
|_3___|Example: content   |
|_4___| TAB1 of listitem 1| 
|_5___|___________________|

我希望这很清楚。所以基本上我会在片段中使用 FragmentManager/TabPageIndicator。

这可能吗?我想不通.. :(

谢谢!

【问题讨论】:

  • 所以你有一个 ListViewFragment 在左边?然后每个 ListView 项目将加载一个不同的 RHS 片段,其中包含:TabPageIndicator 和 ViewPager?

标签: android android-fragments fragment actionbarsherlock


【解决方案1】:

您不应将Fragment 放在Fragment 中。但是,您可以将 ViewPager 放入片段中并获得您正在寻找的结果。

不久前,我的一个应用程序遇到了同样的问题(只是我希望ViewPager 包含一些ListViews)。这是最终结果(见行;红色包含Fragment,蓝色ViewPagerIndicator,绿色ViewPager):

我通过以下步骤完成了这项工作。拳头,对于细节片段,我创建了以下 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.viewpagerindicator.TabPageIndicator
        android:id="@+id/viewpagerIndicator"
        android:layout_height="wrap_content"
        android:layout_width="match_parent" />
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

</LinearLayout>

然后,我设置了一个自定义 PagerAdapter 来填充 ViewPager 和 TabPageIndicator:

public class MainPagerAdapter extends PagerAdapter implements TitleProvider {

    // constructor
    ...        

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        // remove the object (we don't want to keep it in memory as it will get recreated and cached when needed)

        ViewPager viewPager = (ViewPager) container;
        View view = (View) object;
        viewPager.removeView(view);
    }

    @Override
    public Object instantiateItem(View pager, final int position) {
        // inflate your 'content'-views here (in my case I added a listview here)
        // similar to a listadapter's `getView()`-method

        View wrapper = ... // inflate your layout
        ... // fill your data to the appropriate views

        ((ViewPager) pager).addView(wrapper);
    }

    public String getTitle(int position) {
        ... // return the title of the tab
    }
}

接下来,在我的片段中,我设置了以下内容:

public class MainFragment extends Fragment {

    private MainPagerAdapter pagerAdapter;
    private TabPageIndicator mIndicator;
    private ViewPager viewPager;

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        View detailsFrame = context.findViewById(R.id.details_fragment);
        // setup your adapter: pass data, etc.
        this.pagerAdapter = new MainPagerAdapter(...);
        this.viewPager = (ViewPager) context.findViewById(R.id.viewpager);
        viewPager.setAdapter(pagerAdapter);

        this.mIndicator = (TabPageIndicator) context.findViewById(R.id.viewpagerIndicator);
        this.mIndicator.setViewPager(viewPager);
    }
}

【讨论】:

  • 你好,请提供完整的代码..我无法理解在某些时候提前谢谢
  • @Reinier ,这是什么 查看详情Frame = context.findViewById(R.id.details_fragment);它代表什么? i.d 放在哪个布局中?
【解决方案2】:

您不能将片段嵌套在片段中。它会显示得很好,但是当您想要使用事务替换其中一些时它会崩溃。

看看这些:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多