用cardviews和viewpager填充linearlayout

时间:2018-09-24 06:47:08

标签: android android-viewpager fragmentpageradapter

我有一个问题,试图用内部的Cardview填充线性布局,而在其中的CardView则填充了两个片段。碎片将循环存储在SQLite数据库中的数据填充。

问题在于,只有最后一个viewpager适配器调用getItem函数,从而使得除最后一个适配器之外的所有卡都是空的。

这是元素布局

<?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="100dp"
    android:orientation="vertical">

    <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_marginTop="10dp"
        card_view:cardCornerRadius="4dp">

        <com.jaimedediego.cubemaster.view.CustomViews.CustomViewPager
            android:id="@+id/detail_container"
            android:layout_width="match_parent"
            android:layout_height="100dp" />

    </android.support.v7.widget.CardView>

</LinearLayout>

CustomViewPager的工作原理与普通Viewpager完全一样。

此功能是在外部线性布局中填充具有先前布局的元素的功能。

        for (int i = 0; i < timesDetail.size(); i++) {
            final Detail detail = timesDetail.get(i);

            final View v = getLayoutInflater().inflate(R.layout.element_timesdetail_list, null);

            final CustomViewPager viewPager = v.findViewById(R.id.detail_container);

            viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
                @Override
                public Fragment getItem(int position) {
                    return PlaceholderFragmentDetail.newInstance(position, detail);
                }

                @Override
                public int getCount() {
                    return 2;
                }
            });

            timesLayout.addView(v);
        }
    }

应该为每个循环调用getItem,以调用PlaceholderFragmentDetail的onCreateView。但事实并非如此(我认为问题出在这里)。这样一来,除了最后一个卡片视图外,所有卡片视图都为空。

PlaceholderFragmentDetail调用是

    public static class PlaceholderFragmentDetail extends Fragment {

        private static final String ARG_SECTION_NUMBER = "section_number";
        private static final String DETAIL = "detail";

        public PlaceholderFragmentDetail() {/*Do nothing*/}

        public static PlaceholderFragmentDetail newInstance(int sectionNumber, Detail detail) {
            PlaceholderFragmentDetail fragment = new PlaceholderFragmentDetail();
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            args.putSerializable(DETAIL, detail);
            fragment.setArguments(args);
            return fragment;
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View v;
            Detail detail = (Detail) getArguments().getSerializable(DETAIL);

            switch (getArguments().getInt(ARG_SECTION_NUMBER)) {
                case 0:
                    v = inflater.inflate(R.layout.fragment_detail, container, false);
                    break;
                case 1:
                    v = inflater.inflate(R.layout.layout_dialog_areyousure, container, false);
                    break;
                default:
                    v = null;
                    break;
            }
            return v;
        }
    }

我真的认为问题出在FragmentPagerAdapter的getItem调用上,但是我不知道自己在做什么错。

This is the current screen

0 个答案:

没有答案