Ilya Timokhin
Ilya Timokhin

Reputation: 61

setVisibility() in onClick() makes app crash

I'm trying to show pic after pressing ImageButton, but when I test it on my phone it just crashes and drops me on previous Activity.

There are some more Activities, but each of them works normally.

ActionActivity.java

public class ActionActivity extends AppCompatActivity implements View.OnClickListener {

    ImageButton PhotoHint;
    ImageView PhotoPic;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.action);

        ImageButton PhotoHint = (ImageButton) findViewById(R.id.PhotoHint);
        ImageView PhotoPic = (ImageView) findViewById(R.id.Photo);

        PhotoPic.setVisibility(View.INVISIBLE);
        PhotoHint.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.PhotoHint:
                PhotoPic.setVisibility(View.VISIBLE);
        }

    }
}

action.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
...

    <FrameLayout
        android:id="@+id/frameLayout1"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/Photo"
            android:layout_width="189dp"
            android:layout_height="169dp"
            android:layout_gravity="center"
            android:background="@drawable/somepic"
            />

        <ImageButton
            android:id="@+id/PhotoHint"
            android:layout_width="42dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center|bottom"
            app:srcCompat="@android:drawable/ic_menu_gallery" />

    </FrameLayout>
</LinearLayout>

Upvotes: 1

Views: 87

Answers (1)

Atif AbbAsi
Atif AbbAsi

Reputation: 6035

try now it will work fine...

the problem was with this line

 ImageButton PhotoHint = (ImageButton) findViewById(R.id.PhotoHint);
        ImageView PhotoPic = (ImageView) findViewById(R.id.Photo);

they were not globally initialized that's why you were facing crash.!

public class ActionActivity extends AppCompatActivity implements View.OnClickListener {

        ImageButton photoHint;
        ImageView photoPic;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.action);

             photoHint = (ImageButton) findViewById(R.id.PhotoHint);
             photoPic = (ImageView) findViewById(R.id.Photo);

            photoPic.setVisibility(View.INVISIBLE);
           photoHint.setOnClickListener(this);
        }

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.PhotoHint:
                    photoPic.setVisibility(View.VISIBLE);
            }

        }
    }

Upvotes: 2

Related Questions