我有一个名为 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)
答案 0 :(得分:1)
你永远不会通过new创建一个Activity。它将无法正确初始化,活动的初始化仅由框架处理,以响应启动Activity的请求。即使您可以通过new创建一个Activity也无济于事,您将创建一个具有不同视图的新Activity。 (在这里你得到了NPE,因为onCreate根本没有被调用,而不是被框架调用,因为它没有正确启动,而不是你。)
相反,你应该做的是传递你想要切换到你的探测器的视图,以便它可以直接进行,或者让创建手势探测器的活动在回调中传递并自行完成。
这里有一个机会,你真的不明白什么是活动 - 如果你认为你可以通过创建一个Activity随时添加视图,那么你需要回到关于活动是什么的教程。