Viewpager无法以编程方式更改imageView背景

时间:2015-07-28 18:08:54

标签: android android-layout android-fragments android-viewpager

我正在尝试初始化ViewPager。我没有以编程方式将图像设置为viewpager。这就是我想出来的:

TutorialActivity.class

package app.trial.com;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;

public class TutorialActivity extends FragmentActivity {

/**
 * The number of pages (wizard steps) to show in this demo.
 */
private static final int NUM_PAGES = 3;

/**
 * The pager widget, which handles animation and allows swiping horizontally to access previous
 * and next wizard steps.
 */
private ViewPager mPager;

/**
 * The pager adapter, which provides the pages to the view pager widget.
 */
private PagerAdapter mPagerAdapter;

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

    // Instantiate a ViewPager and a PagerAdapter.
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);
}

@Override
public void onBackPressed() {
    if (mPager.getCurrentItem() == 0) {
        // If the user is currently looking at the first step, allow the system to handle the
        // Back button. This calls finish() on this activity and pops the back stack.
        super.onBackPressed();
    } else {
        // Otherwise, select the previous step.
        mPager.setCurrentItem(mPager.getCurrentItem() - 1);
    }
}

/**
 * A simple pager adapter that represents 5 ScreenSlidePageFragment objects, in
 * sequence.
 */
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
    public ScreenSlidePagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return TutorialFragment.create(position);
    }

    @Override
    public int getCount() {
        return NUM_PAGES;
    }
}
}

TutorialFragment.class

package app.trial.com;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

public class TutorialFragment extends Fragment {
public static final String ARG_PAGE = "page";

private int mPageNumber;

public static TutorialFragment create(int pageNumber) {
    TutorialFragment fragment = new TutorialFragment();
    Bundle args = new Bundle();
    args.putInt(ARG_PAGE, pageNumber);
    fragment.setArguments(args);
    return fragment;
}

public TutorialFragment() {}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        mPageNumber = getArguments().getInt(ARG_PAGE);
    }
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_tutorial, container, false);

    switch(mPageNumber) {
        case 1:
            ((ImageView) rootView.findViewById(R.id.tutorialImage)).setImageResource(R.drawable.tutorial_03);
            break;
        case 2:
            ((ImageView) rootView.findViewById(R.id.tutorialImage)).setImageResource(R.drawable.tutorial_02);
            break;
        case 3:
            ((ImageView) rootView.findViewById(R.id.tutorialImage)).setImageResource(R.drawable.tutorial_03);
            break;
        default:
            break;
    }
    return rootView;
}


/**
 * Returns the page number represented by this fragment object.
 */
public int getPageNumber() {
    return mPageNumber;
}
}

当我尝试使用rootView.findViewById(R.id.tutorialImage).setImageResource()更改R.id.tutorialImage时,它不会更改背景图像。此外,它不会返回null。

顺便说一句,我的fragmentTutorial布局是:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" tools:context="app.trial.com.TutorialFragment">

    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent">


        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/tutorialImage" />
    </ScrollView>
</FrameLayout>

1 个答案:

答案 0 :(得分:-1)

试试此代码

imageView.setImageDrawable(Context.getDrawable(R.drawable.tutorial_number));

getDrawable - developer.android.com

修改

我刚做了测试,这很好用

imageView.setImageDrawable(ResourcesCompat.getDrawable(getResources(),R.drawable.tutorial_number, null));