2 iperishing Iperishing 于 2016.09.27 10:54 提问

小白问个问题,空指针,Android,Viewpager

package com.example.viewpage_animation_app;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

ViewPager iviewpager;
List<ImageView> ilist = new ArrayList<ImageView>();
int[] image = new int[] { R.drawable.ic_launcher, R.drawable.guide_image2, R.drawable.guide_image3 };

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    init();
    iviewpager.setAdapter(new PagerAdapter() {

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // TODO Auto-generated method stub
            if (ilist.get(position) != null) {
                container.addView(ilist.get(position));

            } else {
                Toast.makeText(MainActivity.this, "The null", Toast.LENGTH_SHORT).show();
            }

            return ilist.get(position);

        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            container.removeView((View) object);
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0 == arg1;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return ilist.size();
        }
    });

}

private void init() {
    // TODO Auto-generated method stub
    iviewpager = (ViewPager) findViewById(R.id.viewpager);
    for (int i = 0; i < image.length; i++) {
        ImageView imageView = (ImageView) findViewById(image[i]);
        ilist.add(imageView);

    }

}

}


container.addView(ilist.get(position)); 此句一直显示空指针,加了一个条件语句,虽然不报错了,输出的是下面的那个toast。。。。。

5个回答

Mr_dsw
Mr_dsw   Ds   Rxr 2016.09.27 12:44
已采纳

、、
iviewpager = (ViewPager) findViewById(R.id.viewpager);
for (int i = 0; i < image.length; i++) {
ImageView imageView = (ImageView) findViewById(image[i]);
ilist.add(imageView);
}
、、
这里你就别findViewById了,用new ImageView创建吧。findViewById(image[i]);你获取的是什么,这个方法你都用错了

Iperishing
Iperishing 我的天。。。。。谢谢
接近 2 年之前 回复
Veggiel
Veggiel   2016.09.27 11:26

ilist这个是不是为空呢

sammul19933912
sammul19933912   2016.09.27 11:26

你的list里面有数据吗?

Iperishing
Iperishing ilist我不是在那个init添加数据了吗。。。
接近 2 年之前 回复
struggleflea
struggleflea   2016.09.27 11:28

adapter里面ilist没有值,你可以在init()最后加上notifysetchanged(这个不保证有效)或者将adapter拿出来,在new adapter的时候将list通过构造方法将list传入adapter。

Iperishing
Iperishing 可是我不是在init里面通过一个for循环添加了ilist的数据吗。。。。。
接近 2 年之前 回复
dd304317075
dd304317075   2016.09.27 14:49

楼上是对的
findViewById()里面的参数是R.id.xxx,而你的image[]里面是R.drawable.xxx
你的for循环里面可以这样写
for (int i = 0;i < image.length;i++){
ImageView imageView = new ImageView(this);
imageView.setImageResource(image[i]);
ilist.add(imageView);
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
viewpager获取当前view报空指针的解决方法
因为需求,我需要获得viewpager当前的view 于是我采用以下写法 [java] view plaincopy View currentView = mViewPager.getChildAt(mViewPager.getCurrentItem());   然后我拿这个view去做其他的事,但是滑动超过3个view后,再拿这
Android中ViewPager + Fragment使用ButterKnife注解时出现空指针NullPoint的情况
一、如题。当Fragment超过3个时,包括3个,这种情况下使用Butterknife注解有时候会出现空指针。原因如下:在onCreateView里面进行绑定后,如果连续滑动,ViewPager会移除Fragment,然后Fragment会执行下面的方法: @Override public void onDestroyView() { super.onDestroyV
ViewPager+Fragment+FragmentPagerAdapter刷新空指针
这几天被一个问题弄昏了头,就是在viewpager下边有个按钮,点击按钮可以刷新viewpager,里面大概有1000+个fragment,而且都是一个fragment只是数据不一样。点击按钮刷新的时候需要重新for循环new Fragment,然后调用adapter.notifyDataSetChanged()或者重新new adapter()都不会刷新vp,然后百度看了看说需要remove掉v
给ViewPager设置adapter出现空指针异常 解决
问题描述: TopNewsAdapter topNewsAdapter = new TopNewsAdapter(); System.out.println("11111111" + topNewsAdapter == null);// 返回false,表明topNewsAdapter 不为空 System.out.println("11111111" + mViewPager == n
ViewPager如何获取当前的子view( 解决getChildAt(position) 为null的问题)
我使用viewpager做了一个滑动的切换效果,效果还挺不错,具体实现效果网上很多,各位可以去找,不过在实现切换效果之后,因为需求需要,我需要获取当前显示的那个view,这就很让人恶心了。viewpager有setOnPageChangeListener,里面有 @Override   public voidonPageSelected(int arg0) {   }   @Overr
fragment 中使用 setUserVisibleHint 懒加载遇到的坑
在viewpager + fragment 联合使用时,利用setUserVisibleHint进行懒加载时,发现并不适用于view的操作。。。因为setUserVisibleHint是早于oncreateview之前执行的,所以会报空指针,用一段代码演示一下 @Override public void setUserVisibleHint(boolean isVisible
android fragment setUserVisibleHint方法的使用
参考  http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1021/1813.html 我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或从本地加载,或从网络加载,那么在这个activity刚创建的时候就变
ViewPager Kotlin 教程入门
原文:ViewPager Tutorial: Getting Started in Kotlin 作者:Diana Pislaru 译者:kmyhy ViewPager 是一个强大的布局管理工具,允许你在 app 中使用滑动手势进行导航。通常用于创建幻灯片效果、启动引导,或者 tab view。通过左右滑动在两个 ViewPage 页面之间切换,从而节省屏幕空间,创建更加迷...
viewPager的getChildAt为null的解决办法
layoutContent = (ImageLayout) viewPagerImgs.getChildAt(this.currentItem).findViewById(R.id.layoutContent); if (layoutContent != null ){ layoutContent.setEditotStatus(); }但总是说viewPagerImgs.getChild
ViewPager SimpleOnPageChangeListener中回调函数的调用场景
239 240 public static class SimpleOnPageChangeListener implements OnPageChangeListener { 241 @Override 242 public void onPageScrolled(int position, float positionOffset, int posit