Пользовательский вид с viewpager не отображает фрагменты, если несколько экземпляров вида сосуществуют - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть действие с 2 экземплярами одного и того же настраиваемого представления.Пользовательское представление расширяется FrameLayout и имеет ViewPager внутри.ViewPager использует простой FragmentPagerAdapter, который использует простой Fragments.

. Проблема в том, что только первый пользовательский вид отображает фрагменты в пределах ViewPager.Второй загружен правильно, но фрагменты не отображаются.

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LayoutWithViewPager view1 = findViewById(R.id.layout_with_viewpager_1);
        view1.getViewPager().setAdapter(new SimplePagerAdapter(getSupportFragmentManager()));

        LayoutWithViewPager view2 = findViewById(R.id.layout_with_viewpager_2);
        view2.getViewPager().setAdapter(new SimplePagerAdapter(getSupportFragmentManager()));
    }
}

activity_main.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.example.myapplication.LayoutWithViewPager
        android:id="@+id/layout_with_viewpager_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_red_light" />

    <com.example.myapplication.LayoutWithViewPager
        android:id="@+id/layout_with_viewpager_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_bright" />
</LinearLayout>

LayoutWithViewPager.java (пользовательский вид):

public class LayoutWithViewPager extends FrameLayout {

    private ViewPager viewPager;

    public LayoutWithViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initView();
    }

    private void initView() {
        inflate(getContext(), R.layout.layout_with_viewpager, this);
        viewPager = findViewById(R.id.viewpager);
    }

    public ViewPager getViewPager() {
        return viewPager;
    }
}

layout_with_viewpager.xml:

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="100dp" />
</merge>

SimplePagerAdapter.java:

public class SimplePagerAdapter extends FragmentPagerAdapter {

    public SimplePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return new SimpleFragment();
    }

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

SimpleFragment.java:

public class SimpleFragment extends Fragment {

    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        TextView view = new TextView(getContext());
        view.setText("Fragment");
        return view;
    }
}

Если вы поменяете местами порядок 2 пользовательских представлений вxml действия, первый по порядку все еще получает свои фрагменты, в то время как второй - нет.

Это происходит только с ViewPagers, которые используют FragmentPagerAdapter, другие представления в пользовательском представлении и ViewPagersкоторые используют PagerAdapter отображаются нормально.

...