2011-10-15 43 views
1

當我使用OnTouchListener如果我再補充一點說,像做一個命令它僅適用:OnTouchListener怪異的錯誤

tv.setText(「」);

例如:

drawView.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View v, MotionEvent ev) { 
       tv.setText(""); 
       int x = ev.getX(); 

       return true; 
      } 
     }); 

如果你想刪除說tv.setText("");行,它不會工作..任何想法?

+0

什麼不行?你有沒有添加日誌記錄或設置斷點來查看發生了什麼? – spatulamania

+0

爲什麼它應該工作,它不會工作,首先澄清你想要什麼? –

回答

0

如果程序的流程在onTouch中輸入,那麼整個方法將被執行。這就是流將繼續執行語句,直到它到達方法的結束括號或它找到一個返回語句(在這種情況下,您必須返回true/false)。除了當你有一些產生異常的錯誤時,正常的流程將被打破並拋出異常。

public boolean onTouch(View v, MotionEvent ev) { 
       tv.setText(""); 
       int x = ev.getX(); 

       return true; 
      } 

我想說的是,如果tv.setText(「」);然後執行int x = ev.getX();也被執行。

這是小的sniped來實現你的問題,但我認爲你想從代碼中的其他人讀取x變量,並且你還定義了全局x變量,所以你期望x變量改變它的值。那麼它不會在onTouch中導致在這裏創建具有相同名稱x的另一個var,並且您更改本地var的值而不是全局值。你可以用 Log.v(「local var」,「x =」+ x);