【问题标题】:ViewPager layouts are not displayed不显示 ViewPager 布局
【发布时间】:2021-09-22 19:38:44
【问题描述】:

我正在尝试使用不带片段的viewpager,仅使用布局文件,但布局不只显示tabdots,我做错了什么?

activity_ponto_biometria.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
     <androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/constraintLayout2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/photos_viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"/>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabDots"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        app:layout_constraintBottom_toBottomOf="@+id/photos_viewpager"
        app:tabBackground="@drawable/tab_selector"
        app:tabGravity="center"
        app:tabIndicatorHeight="0dp" />

</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

AdapterAjudaMarcacao.java

public class AdapterAjudaMarcacao extends PagerAdapter {


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

@Override
public void destroyItem(ViewGroup container, int position,
                        Object object) {
    container.removeView((View)object);
}

@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
    int layout;
    if (position == 0){
        layout = R.layout.pop_up_ajuda_1;
    } else if (position == 1){
        layout = R.layout.pop_up_ajuda_2;
    } else {
        layout = R.layout.pop_up_ajuda_3;
    }
    View view = LayoutInflater.from(container.getContext())
            .inflate(layout, container, false);
    container.addView(view);
    return view;
}

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    return false;
}
}

PontoBiometriaActivity.java

public class PontoBiometriaActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ponto_biometria);
    Objects.requireNonNull(getSupportActionBar()).hide();

    setTitle("Ponto Coletivo");

    ViewPager pager = findViewById(R.id.photos_viewpager);
    PagerAdapter adapter = new AdapterAjudaMarcacao();
    pager.setAdapter(adapter);

    TabLayout tabLayout = findViewById(R.id.tabDots);
    tabLayout.setupWithViewPager(pager, true);

}

显示了tabdots的数量,但内容没有,我做错了什么?

【问题讨论】:

  • 你的isViewFromObject() 方法应该是return view == object;

标签: android android-viewpager


【解决方案1】:

Mike M. 是对的。 而不是:

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    return false;
}

试试这个:

@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
    return view == object;
}

根据documentation,PagerAdapter 需要此方法才能正常工作。

post 解释:

instantiateItem(ViewGroup, int) 方法为特定视图返回 Object。当 viewpager 更改页面时,PagerAdapter 实现将 Object 视为 key 值。

因此,如果我们从instantiateItem(ViewGroup, int) 返回视图本身,那么该页面的key 将成为视图本身。我们可以查看return view == object;来自isViewFromObject (View view, Object object),它将始终返回true,我们的页面将显示出来。

【讨论】:

  • 成功了,非常感谢,我没注意这个细节
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 1970-01-01
  • 2013-07-21
  • 1970-01-01
相关资源
最近更新 更多