0

我目前正在尝试制作一个需要在其中一个中有多个选项卡和一个日历的应用程序。我使用片段来执行多个选项卡,但我没有找到如何在其中实现日历。我尝试使用调色板将其添加到 xml 文件中,但在我的 main.xml 文件中出现空错误。

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void androidx.viewpager.widget.ViewPager.setAdapter(androidx.viewpager.widget.PagerAdapter)”

这是我的 row_calendar.xml 文件

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:text="Calendar layer"
       />

    <CalendarView
        android:id="@+id/calendarView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" />


</RelativeLayout>

这是我的 MainActivity.java

package com.example.nootropicsmonitoringapp;

import android.os.Bundle;
import android.os.Handler;
import android.widget.CalendarView;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;

import com.google.android.material.tabs.TabLayout;

public class MainActivity extends AppCompatActivity {

    TabLayout tabLayout;
    ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tabLayout =findViewById(R.id.tabLayout);
        viewPager = findViewById(R.id.view_pager);

        getTabs();

    }

    public void getTabs(){
        final  ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());

        new Handler().post(new Runnable() {
            @Override
            public void run() {

                ViewPagerAdapter.addFragment(SubstanceListFragment.getInstance(), "Substance List");
                ViewPagerAdapter.addFragment(CalendarFragment.getInstance(), "Calendar");
                ViewPagerAdapter.addFragment(RecapFragment.getInstance(), "Recap");

                viewPager.setAdapter(viewPagerAdapter);

                tabLayout.setupWithViewPager(viewPager);
            }
        });

    }
}

知道我可以改变什么来解决这个问题吗?

谢谢你的帮助 !

(我对android studio很陌生,我没有在网上找到任何答案,所以我在这里问)

4

1 回答 1

0

要使用 View Pager,首先要像这样创建一个 Adapter 类,

public class Adapter extends FragmentStateAdapter {

public Adapter(@NonNull FragmentActivity fragmentActivity) {
    super(fragmentActivity);
}

@NonNull
@Override
public Fragment createFragment(int position) {
    return if (position == 0) {
        new FirstFragment()
    } else {                       // Use Switch Statement here.
        new SecondFragment()
    }
}

@Override
public int getItemCount() {
    return 2; // The number of tabs your Tab Layout has 
}
}

然后在您的视图寻呼机上设置此适配器

binding.viewPager.setAdapter(new Adapter(this)); 

使用视图寻呼机设置选项卡布局,

tabLayout.setupWithViewPager(viewPager);

现在它会正常工作。

于 2021-08-15T15:20:40.870 回答