onClick()中的setVisibility()使应用程序崩溃

时间:2018-07-01 13:42:17

标签: java android

我试图在按下ImageButton之后显示图片,但是当我在手机上对其进行测试时,它崩溃了,并把我放在了先前的Activity上。

还有更多的活动,但是每个活动都可以正常工作。

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>

1 个答案:

答案 0 :(得分:2)

现在尝试即可正常运行...

问题在于这条线

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

它们没有被全局初始化,这就是您面临崩溃的原因。

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);
            }

        }
    }