Null对象参考上的Android ViewPager

时间:2019-06-24 04:00:26

标签: android android-viewpager

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

错误是在执行此代码时

ggplot(data = subset(df, ID == "P1" | ID == "P2") +
   aes(Value1, Value2, group=ID, colour=ID) +
   geom_line()

Logcat错误

viewPager.setAdapter(vp_adapter);

MainActivity.java

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

activity_main.xml

@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);
}

如何完成?

编辑: 因此,它只能像这样用onCreateView运行

<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>

2 个答案:

答案 0 :(得分:1)

您忘记了查找视图。我看到您正在使用ButterKnife视图绑定。

因此,首先使用以下代码声明全局变量viewPager

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

黄油刀SDK出现了。

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

答案 1 :(得分:0)

您错误地使用了Butterknife。您需要在xml中定义要在Java文件中使用的每个视图。将viewPager定义为@BindView(R.id.view_pager) ViewPager viewPager;。 tabLayout也是如此。如果您想直接使用viewPager,请考虑使用数据绑定。