android.support.v4.view.ViewPager无法在API 26(Oreo)上运行

时间:2018-04-07 13:05:44

标签: android android-viewpager

我正在使用ViewPager制作图片滑块,它在API 22上完美运行,但当我在API 26上运行相同的代码时,findViewById会返回null

我的gradle app config:

android {
compileSdkVersion 27
defaultConfig {
    minSdkVersion 21
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"

}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
buildToolsVersion '27.0.3'
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}}

我使用支持库版本27.1.1

为什么ViewPager没有在API 26初始化? :(

public class DetailActivity extends AppCompatActivity {

ViewPager imagePager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);

    imagePager = findViewById(R.id.forklift_view_pager);
    configureToolbar();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        // Respond to the action bar's Up/Home button
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

private void configureToolbar() {
    Toolbar toolbar = findViewById(R.id.detail_activity_toolbar);
    if (toolbar != null) {
        toolbar.setLogo(R.drawable.ic_forklift_logo_transp_white_toolbar_size);
        Drawable backArrow = toolbar.getNavigationIcon();
        if (backArrow != null) {
            backArrow.setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);
        }
    }
    setSupportActionBar(toolbar);
    android.support.v7.app.ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.setHomeButtonEnabled(true);
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowTitleEnabled(false);
    }
}

XML:

    <?xml version="1.0" encoding="utf-8"?>
<ScrollView
    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.support.constraint.ConstraintLayout
        android:id="@+id/detail_layout_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="16dp">

        <android.support.v4.view.ViewPager
            android:id="@+id/forklift_view_pager"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/view2" />

1 个答案:

答案 0 :(得分:0)

好的,我明白了。我只是没有注意,我有两个布局文件(一个用于v26 - 我不记得它是如何创建的)用于相同的活动。因此,我只更新了其中一个XML文件中的id值。