繁体   English   中英

无法从我的活动方法访问视图? (空对象引用)

[英]Unable to access view from my activity's method? (null object reference)

我有一个名为TouchImageView的类,它扩展了ImageView ,它基本上实现了一个类似于 Android 的“照片”中的图像查看器。

当用户单击 TouchImageView 时,我希望“activity_viewimage”中的其他两个视图通过调用主活动ViewImageActivity 中的方法来更改可见性:

@Override
    public boolean onSingleTapConfirmed(MotionEvent e)
    {
        ViewImageActivity viewImageActivity= new ViewImageActivity();
        viewImageActivity.toggleTopBottomViews();
    }

现在在ViewImageActivity

public class ViewImageActivity extends AppCompatActivity {

private View bottomView;
private View topView;

@Override
protected void onCreate(final Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_viewimage);

    bottomView = findViewById(R.id.bottom_view);
    topView = findViewById(R.id.top_view);
}

public void toggleTopBottomViews ()
{
    if (topView.getVisibility()== View.VISIBLE && bottomView.getVisibility()== View.VISIBLE)
    {
        bottomView.setVisibility(View.INVISIBLE);
        topView.setVisibility(View.INVISIBLE);
    }
    else
    {
        bottomView.setVisibility(View.VISIBLE);
        topView.setVisibility(View.VISIBLE);
    }
}

错误堆栈:

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getVisibility()' on a null object reference
                                                                                  at com.example.zigo.photoencryption.ViewImageActivity.toggleTopBottomViews(ViewImageActivity.java:273)
                                                                                  at com.example.zigo.photoencryption.TouchImageView$GestureListener.onSingleTapConfirmed(TouchImageView.java:764)
                                                                                  at android.view.GestureDetector$GestureHandler.handleMessage(GestureDetector.java:300)
                                                                                  at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                  at android.os.Looper.loop(Looper.java:148)
                                                                                  at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                                                  at java.lang.reflect.Method.invoke(Native Method)
                                                                                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

你永远不会通过 new 创建一个 Activity。 它不会被正确初始化,活动的初始化仅由框架处理以响应启动活动的请求。 即使您可以通过 new 创建一个 Activity 也无济于事,您将创建一个具有不同视图的新 Activity。 (在这里你得到 NPE,因为 onCreate 根本没有被调用,而不是被框架调用,因为它没有正确启动,而不是被你调用)。

相反,您应该做的是传入您想要切换到检测器的可见性视图,以便它可以直接执行,或者让创建手势检测器的活动通过回调并自行执行。

在这里,您可能真的不了解活动是什么——如果您认为您可以随时通过创建活动来添加视图,那么您需要回到关于活动是什么的教程。

暂无
暂无

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

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