首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ImageSwitcher安卓NullPointerException

ImageSwitcher安卓NullPointerException
EN

Stack Overflow用户
提问于 2018-06-25 18:16:30
回答 2查看 480关注 0票数 -1

我正在使用ImageSwitcher视图在3张图片之间创建一个无限循环。每秒钟都会在视图中显示另一个图像。

我的代码如下..

我收到以下错误消息:

"java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.ImageView.setImageResource(int)‘’“

这意味着我没有实例化ImageSwitcher,而我相信我是实例化了。我遗漏了什么?

代码语言:javascript
复制
public class SecAct_Foto_Fragment extends Fragment {

    int counter = 0;
    View rootView;
    private ImageSwitcher pic_image_switch;
    private Handler pic_image_switch_handler;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.sec_act_photo_layout, container, false);

        pic_image_switch = (ImageSwitcher) rootView.findViewById(R.id.foto_groot_imageswitch);

        pic_image_switch_handler = new Handler(Looper.getMainLooper());

        pic_image_switch_handler.post(new Runnable() {
            @Override
            public void run() {
                switch (counter) {
                    case 0:
                        pic_image_switch.setImageResource(R.drawable.run_mount);
                        break;
                    case 1:
                        pic_image_switch.setImageResource(R.drawable.run_away);
                        break;
                    case 2:
                        pic_image_switch.setImageResource(R.drawable.run_rocks);
                        break;
                }
                counter += 1;
                if (counter == 3) {
                    counter = 0;
                }
                pic_image_switch.postDelayed(this, 1000);
            }
        });

        return rootView;
    }
}

片段XML:

代码语言:javascript
复制
     <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    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:background="@color/white"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

     <ImageSwitcher
        android:id="@+id/foto_groot_imageswitch"
        android:layout_width="match_parent"
        android:layout_height="220dp"
        android:background="@color/black"
        android:contentDescription="@string/topscreen_picture_secondactivity"
        android:padding="3dp"
        android:scaleType="fitXY"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/run_rocks"
        />

    <ImageView
        android:id="@+id/knoppen"
        android:layout_width="120dp"
        android:layout_height="25dp"
        android:layout_marginBottom="264dp"
        android:contentDescription="@string/threebuttons_secondact"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.501"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:srcCompat="@drawable/but_left" />

</android.support.constraint.ConstraintLayout>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-25 18:50:59

代码语言:javascript
复制
 val pic_image_switch = findViewById(R.id.imageswitch) as ImageSwitcher
        pic_image_switch.setFactory(object : ViewSwitcher.ViewFactory {
            override fun makeView(): View {
                val imageview = ImageView(this@MainActivity)
                return imageview;
            }
        })


        pic_image_switch_handler = Handler();
        pic_image_switch_handler!!.post(object : Runnable {
            override fun run() {
                when (counter) {
                    0 -> mBinding.imageswitch.setImageResource(R.drawable.ic_pic_one)
                    1 -> mBinding.imageswitch.setImageResource(R.drawable.ic_pic_two)
                    2 -> mBinding.imageswitch.setImageResource(R.drawable.ic_pic_three)
                }
                counter += 1
                if (counter === 3) {
                    counter = 0
                }
                pic_image_switch_handler!!.postDelayed(this, 1000)
            }
        })
票数 2
EN

Stack Overflow用户

发布于 2018-06-25 18:42:34

我找到了答案..忘记调用setFactory()方法..为我工作的是什么..

代码语言:javascript
复制
public class SecAct_Foto_Fragment extends Fragment {

    int counter = 0;
    View rootView;
    private ImageSwitcher pic_image_switch;
    private Handler pic_image_switch_handler;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        rootView = inflater.inflate(R.layout.sec_act_photo_layout, container, false);

        /*Animation anim_in = AnimationUtils.loadAnimation(getActivity(), R.anim.enter_from_left);
        pic_image_switch.setInAnimation(anim_in);*/

        //pic_image_switch = new ImageSwitcher(getActivity());
        pic_image_switch = (ImageSwitcher) rootView.findViewById(R.id.foto_groot_imageswitch);

        pic_image_switch.setFactory(new ViewSwitcher.ViewFactory() {
            @Override
            public View makeView() {
                ImageView imageView = new ImageView(getActivity());
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                imageView.setLayoutParams(new ImageSwitcher.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
                return imageView;
            }
        });

        pic_image_switch_handler = new Handler(Looper.getMainLooper());

        pic_image_switch_handler.post(new Runnable() {
            @Override
            public void run() {
                switch (counter) {
                    case 0:
                        pic_image_switch.setImageResource(R.drawable.run_mount);
                        break;
                    case 1:
                        pic_image_switch.setImageResource(R.drawable.run_away);
                        break;
                    case 2:
                        pic_image_switch.setImageResource(R.drawable.run_rocks);
                        break;
                }
                counter += 1;
                if (counter == 3) {
                    counter = 0;
                }
                pic_image_switch.postDelayed(this, 1000);
            }
        });

        return rootView;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51021073

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档