【问题标题】:Android ViewPager from custom library Bug来自自定义库 Bug 的 Android ViewPager
【发布时间】:2023-04-04 14:30:01
【问题描述】:

我正在学习如何创建一个 android 库,并创建了一个简单的入职库。但是我的自定义模块中的 ViewPager 有问题。

当我左右滑动时,我的第二个项目不显示或第一和第二个视图重叠。

我不明白问题出在哪里

[![在此处输入图片描述][2]][2]

[![][3]][3]

我的库中的主类:

public class OnBoardingView extends FrameLayout implements LifecycleObserver {

    public OnBoardingView(@NonNull Context context) {
        super(context, null);
        this.initialize(context, null);
    }

    public OnBoardingView(@NonNull Context context, @NonNull AttributeSet attrs) {
        super(context, attrs);
        this.initialize(context, attrs);
    }

    private void initialize(@NonNull Context context, @Nullable AttributeSet attrs) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        inflater.inflate(R.layout.onboarding_view_root, this);

        List<String> list = new ArrayList<String>();
        list.add("Hello world 1");
        list.add("Hello world 2");
        list.add("Hello world 3");

        ViewPager viewPager = findViewById(R.id._screenPager);
        OnBoardingAdapter<String> onBoardingAdapter = new OnBoardingAdapter<String>(context, list);
        viewPager.setAdapter(onBoardingAdapter);
    }
}

我的适配器:

public class OnBoardingAdapter<T> extends PagerAdapter {

    private Context context;
    private List<T> onBoardingList;

    public OnBoardingAdapter(Context context, List<T> list) {
        this.context = context;
        this.onBoardingList = list;
    }

    @Override
    public int getCount() {
        return this.onBoardingList.size();
    }

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

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

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        View view = LayoutInflater.from(context).inflate(R.layout.onboarding_screen_view, null);

        container.addView(view);

        return view;
    }
}

我的 XML 文件到内容 ViewPager :

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

<androidx.viewpager.widget.ViewPager
    android:id="@+id/_screenPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
</FrameLayout>

每个页面的我的 Xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="onboarding_screen_view" />
</LinearLayout>

在 main_activity 文件中,我调用它来显示我的模块:

    <com.domaine.onboarding.OnBoardingView
    android:layout_width="0dp"
    android:layout_height="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

【问题讨论】:

  • 首先,尝试将您的代码发布为 sn-ps 而不是图像,以便于阅读。
  • 嗨,对不起,我更新了我的问题,将代码添加为 sn-ps。

标签: java android android-studio kotlin android-viewpager


【解决方案1】:

尝试返回视图而不是容器

如果您想轻松实现这一点,请尝试使用viewpager2,您可以使用与recyclerview 适配器类似的适配器

https://developer.android.com/training/animation/vp2-migration

【讨论】:

  • 感谢您在从 isViewFromObject() 中删除 getClass() 时修复的评论
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-06
  • 2023-02-16
相关资源
最近更新 更多