简体   繁体   English

单击按钮显示/隐藏ImageView

[英]Show/Hide ImageView on Button click

I have a RelativeLayout completely created within java, not using xml layout. 我有一个在java中完全创建的RelativeLayout,而不是使用xml布局。 I have a few buttons on the left if my screen. 如果我的屏幕,我左边有几个按钮。 I want to click on one button and show a default image from my res/drawable next to the button and make it disappear again on second click. 我想点击一个按钮,然后在按钮旁边的res / drawable中显示默认图像,并在第二次点击时再次消失。 What I have tried was toggling the visibility but my onClick() raises a FATAL EXCEPTION, NullPointer Exception. 我试过的是切换可见性,但我的onClick()引发了一个致命的异常,NullPointer异常。

This is my code so far. 到目前为止这是我的代码。 Hardcoded the image shows right when I set picview.setVisibility(View.INVISIBLE); 硬编码图像显示我设置picview.setVisibility(View.INVISIBLE); by hand. 用手。 What I am doing wrong in the onClick() ? 我在onClick()中做错了什么?

    private ImageView picview;

        //*snip* loads of other code

    //Show Image Button
    ImageButton show_pic = new ImageButton(this);
    show_pic.setBackgroundColor(Color.WHITE);
    show_pic.setOnClickListener(new OnClickListener()
    {

        @Override
        public void onClick(View v) {
            if(picview.getVisibility() == View.INVISIBLE)
             {
             picview.setVisibility(View.VISIBLE);
             } 
            else if (picview.getVisibility() == View.VISIBLE)
             {
             picview.setVisibility(View.INVISIBLE);
             }          
            }

    });

    params = new RelativeLayout.LayoutParams(40, 40);
    params.topMargin = 10;
    params.leftMargin = 10;
    params.addRule(RelativeLayout.BELOW, button2_id);
    rl.addView(show_pic, params);

    //Imageview loaded from drawable
    ImageView picview = new ImageView(this);
    params = new RelativeLayout.LayoutParams(200, 400);
    params.topMargin = 0;
    params.leftMargin = 30;
    params.addRule(RelativeLayout.RIGHT_OF, button2_id);
    picview.setImageResource(R.drawable.my_image);
    picview.setVisibility(View.INVISIBLE);
    rl.addView(picview, params);

    this.setContentView(rl);

You are accidentally creating two copies of picview . 你不小心创建了两份picview Shorten this line: 缩短这一行:

ImageView picview = new ImageView(this);

To: 至:

picview = new ImageView(this);

(Your field variable private ImageView picview; never changed from null , so when you clicked your Button you see the NullPointerException...) (你的字段变量private ImageView picview;永远不会从null更改,所以当你点击你的Button时你会看到NullPointerException ...)

change show_pic.setOnClickListener(new OnClickListener() to 将show_pic.setOnClickListener(new OnClickListener()更改为

show_pic.setOnClickListener(new View.OnClickListener() show_pic.setOnClickListener(new View.OnClickListener()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM