2016-09-25 44 views
-1

我有一個類叫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) 

回答

1

你永遠不會通過新建一個活動。它不會得到正確的初始化,活動的初始化只能由框架處理,以響應啓動Activity的請求。即使你可以通過新建一個活動它不會幫助你,你會創建一個新的活動,它會有不同的意見。 (在這裏你得到NPE是因爲onCreate根本沒有被調用,而不是由框架調用,因爲它沒有被正確啓動,而不是由你來啓動)。

相反,你應該做的是傳遞你想要切換到你的檢測器的可見度的視圖,以便它可以直接做到,或者讓創建手勢檢測器的活動在回調中傳遞並自行完成。

這裏有一個機會,你真的不明白什麼是活動 - 如果你認爲你可以通過創建一個活動隨時添加視圖,那麼你需要返回教程來了解活動是什麼。

+0

感謝您的回覆。 –

+0

你會如何通過意見?我移動了所有東西,我試圖在onView(view.ById(R.id.touchimageview).topView = findViewById(R.id.topview))中完成topView作爲touchimageview類中的一個公共變量,但這不起作用 –

相關問題