首页 > 解决方案 > 空对象引用上的 Android ViewPager

问题描述

我有一个需要包含 2 个片段的 viewPager 的活动,但是当我在 onCreateView 中设置 ViewPager 适配器时,它始终为空。我使用 ButterKnife 将其布局绑定到活动。

错误是执行此代码时

viewPager.setAdapter(vp_adapter);

Logcat 中的错误

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.view.ViewPager.setAdapter(android.support.v4.view.PagerAdapter)' on a null object reference

MainActivity.java

@BindView(R.id.tab_layout)
TabLayout tabLayout;

@BindView(R.id.view_pager)
ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = this;
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);

    handleViewPager();
    handlePosition();
}


private void handleViewPager(){
    ViewPagerAdapter vp_adapter = new ViewPagerAdapter(getSupportFragmentManager(), getApplicationContext());
    viewPager.setAdapter(vp_adapter);
    viewPager.setOffscreenPageLimit(2);
    tabLayout.setupWithViewPager(viewPager);
}

activity_main.xml

<LinearLayout
    android:id="@+id/topUpHeader"
    android:layout_alignParentTop="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:background="#1e84d4">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Top Up"
        android:textColor="#ffffff"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"/>


</LinearLayout>

<LinearLayout
    android:id="@+id/viewpager_parent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_below="@id/topUpHeader">

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabGravity="fill"
        app:tabMode="fixed"
        app:tabIndicatorColor="#000000">
    </android.support.design.widget.TabLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/view_pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/viewpager_parent">

    </android.support.v4.view.ViewPager>

</LinearLayout>

怎么做?

编辑:所以它只是像这样使用 onCreateView 运行

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

    viewPager   = findViewById(R.id.view_pager);
    tabLayout   = findViewById(R.id.tab_layout);
    ViewPagerAdapter vp_adapter = new ViewPagerAdapter(getSupportFragmentManager(), this);
    viewPager.setAdapter(vp_adapter);
    viewPager.setOffscreenPageLimit(2);
    tabLayout.setupWithViewPager(viewPager);

    handlePosition();
}

标签: androidandroid-viewpager

解决方案


你忘了找风景。我看到您正在使用 ButterKnife 视图绑定。

viewPager所以首先使用下面的代码声明全局变量。

@BindView(R.id. view_pager) 
ViewPager viewPager;

gradle 中的 Butterknife SDK。

implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

推荐阅读