【问题标题】:java.lang.NullPointerException null object reference viewpagerjava.lang.NullPointerException null 对象引用 viewpager
【发布时间】:2021-09-08 16:25:42
【问题描述】:

我在编码时被卡住了,需要帮助。 我在我的项目中使用视图绑定。 我无法绑定,并且工作正常。 我在之前的项目中使用了相同的代码,但视图绑定除外,并且该项目运行良好。

这是我的 XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
tools:context=".Home">

<androidx.viewpager.widget.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/bottom_navigation" />

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottom_navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    app:menu="@menu/bottom_navigation_menu" />

</RelativeLayout>

这是我的 Java 代码

package com.example.professionals;

public class Home extends AppCompatActivity {

private ActivityHomeBinding Homebinding;
protected ViewPager viewPager;
protected Mypager_Adapter mypager_adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    Homebinding = ActivityHomeBinding.inflate(getLayoutInflater());
    View view = Homebinding.getRoot();
    setContentView(view);

    Homebinding.pager.findViewById(R.id.pager);
    mypager_adapter = new Mypager_Adapter(this);
    viewPager.setAdapter(mypager_adapter);

    Homebinding.bottomNavigation.setOnItemSelectedListener(new 
    NavigationBarView.OnItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.home:
                    showMsg("Home");
                    break;
                case R.id.profile:
                    showMsg("Profile");
                    break;
            }
            return false;
        }
    });
}

private void showMsg(String msg) {
    Toast toast = Toast.makeText(this, msg, Toast.LENGTH_LONG);
    toast.show();
}
}

这是错误列表

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.professionals, PID: 17743
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.professionals/com.example.professionals.Home}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.viewpager.widget.ViewPager.setAdapter(androidx.viewpager.widget.PagerAdapter)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2473)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2535)
    at android.app.ActivityThread.access$1100(ActivityThread.java:154)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5582)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.viewpager.widget.ViewPager.setAdapter(androidx.viewpager.widget.PagerAdapter)' on a null object reference
    at com.example.professionals.Home.onCreate(Home.java:32)
    at android.app.Activity.performCreate(Activity.java:6321)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2535) 
    at android.app.ActivityThread.access$1100(ActivityThread.java:154) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1396) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:148) 
    at android.app.ActivityThread.main(ActivityThread.java:5582) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

提前感谢您的帮助!

【问题讨论】:

  • 你还需要初始化 ViewPager 对象

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


【解决方案1】:

你需要添加

viewPager = findViewById<ViewPager>(R.id.pager)

在这行之前

viewPager.setAdapter(mypager_adapter);

编辑:

实际上,您似乎正在尝试使用 ViewBinding 以及常规 findViewById,如果我是您,我会坚持使用 ViewBinding 并删除此行

protected ViewPager viewPager;

那就试试这个

Homebinding.pager.setAdapter(mypager_adapter);

【讨论】:

    【解决方案2】:

    你还没有初始化你的 ViewPager。

    您需要初始化您的 viewPager。为此,您有几个选择

    在设置适配器之前使用 findViewById 进行初始化。

    viewPager = findViewById(R.id.pager)
    

    因为您使用视图绑定是个好主意

    Homebinding.pager.setAdapter(mypager_adapter)
    

    【讨论】:

      猜你喜欢
      • 2014-09-18
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 2018-10-30
      • 2021-05-04
      • 2015-03-10
      • 2017-10-31
      相关资源
      最近更新 更多