在ViewPager中显示WebView

时间:2015-12-08 11:57:32

标签: android webview android-viewpager

我正在尝试使用Chinese blog中的代码在Android WebView中展示ViewPager

public class PagerActivity extends Activity {

private ViewPager vpArticle;
private MyPagerAdapter myAdapter;
private List<View> mListViews;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.pager);

    myAdapter = new MyPagerAdapter();
    vpArticle = (ViewPager) findViewById(R.id.viewpager);
    vpArticle.setAdapter(myAdapter);

    mListViews = new ArrayList<View>();
    addView(mListViews, "file:///android_asset/jan.html");
    addView(mListViews, "file:///android_asset/feb.html");
}

private void addView(List<View> viewList,String url)
{
    WebView webView=new WebView(this);
    webView.loadUrl(url);
    viewList.add(webView);
}

private class MyPagerAdapter extends PagerAdapter {

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        Log.d("k", "destroyItem");
        ((ViewPager) arg0).removeView(mListViews.get(arg1));
    }

    @Override
    public void finishUpdate(View arg0) {
        Log.d("k", "finishUpdate");
    }

    @Override
    public int getCount() {
        Log.d("k", "getCount");
        return mListViews.size();
    }

    @Override
    public Object instantiateItem(View arg0, int arg1) {
        Log.d("k", "instantiateItem");
        ((ViewPager) arg0).addView(mListViews.get(arg1), 0);
        return mListViews.get(arg1);
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        Log.d("k", "isViewFromObject");
        return arg0 == (arg1);
    }

但是,当我尝试运行它时,我收到了NullPointerException错误。

12-08 19:44:48.093 4968-4968/? E/AndroidRuntime:  Caused by: java.lang.NullPointerException
12-08 19:44:48.093 4968-4968/? E/AndroidRuntime:     at .PagerActivity$MyPagerAdapter.getCount(PagerActivity.java:61)
12-08 19:44:48.093 4968-4968/? E/AndroidRuntime:     at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:439)
12-08 19:44:48.093 4968-4968/? E/AndroidRuntime:     at .PagerActivity.onCreate(PagerActivity.java:30)

第61行是return mListViews.size();,第30行是vpArticle.setAdapter(myAdapter);

我错过了哪些步骤?我是Android开发的自学者,我的技能有限。

1 个答案:

答案 0 :(得分:3)

移动

vpArticle.setAdapter(myAdapter);

之后

mListViews = new ArrayList<View>();
addView(mListViews, "file:///android_asset/jan.html");
addView(mListViews, "file:///android_asset/feb.html");

你有 NPE ,因为mListViews ==null return mListViews.size();