2011-12-30 28 views
3

我使用Application來訪問我的數據。 而buttom被點擊,我想使用應用程序中的數據。 我用下面的代碼:getApplication在onClick方法中使用

b.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
MyData md = (MyData)this.getApplication(); 
md.setName(""); 
md.setIP(""); 
} 
}); 

但錯誤顯示:

The method getApplication() is undefined for the type new View.OnClickListener(){} 

如何的onClick方法使用getApplication?

+0

在onclicklistener你得到視圖爲V,所以嘗試像這樣..v.getApplicationContext(); – 2011-12-30 04:42:37

+0

你是否在使用Application類來進行全局訪問? – 2011-12-30 04:53:15

回答

4

通過getApplication(),我假設你指的是Activity.getApplication()
在這種情況下,如果您刪除this它應該工作。

MyData md = (MyData)getApplication(); 
1

假設你的班級名爲Example
onCreate你可以這樣做:
Example.this.getApplication();

或者,一個備用,更復雜的方法,它其實我更喜歡的是:
在你的類主體聲明Activity activity;,然後在onCreate聲明activity = this;,然後在您的onClick聲明activity.getApplication();像這樣:

public class Example extends Activity{ 

     Activity activity; 

    @Override 
    public void onCreate(Bundle bundle){ 
     super.onCreate(bundle); 
     setContentView(...); 

     activity = this; 

View.OnClickListener listener = new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
        activity.getApplication(); 

      } 
     }; 

} 

編輯:
或刪除this。這也應該有效。

1

的「本」在Java中意味着你的。

所以你在的onClick(視圖v)類爲「B」類。 「b」沒有getApplication()方法,這是正確的。

當你使用它時,你可能會引用某些東西。

這樣做

public class MyActivity extends Activity{ 
    public initB(){ 
     b.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       setMyData(); 
      } 
     }); 
    } 


    public setMyData(){ 
     MyData md = (MyData)this.getApplication(); 
     md.setName(""); 
     md.setIP(""); 
    } 
} 

所以,現在,當你使用這個,這是指MyActivity。

2

你可以簡單的做到這一點,

要設置名稱 -

((MyApplication)getApplication()).setName("StackOverflow"); 

要獲得名稱 -

((MyApplication)getApplication()).getName(); 
1

如果您已經創建了一個活動像

public class MainActivity extends Activity { 

.... 

b.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
MyData md = (MyData)MainActivity.this.getApplication(); 
md.setName(""); 
md.setIP(""); 
} 
}); 

.... 

} 

使用你的班級名稱然後this.getApplication(),因爲你使用的「this」將指向View.onClickLIstener方法....因爲它沒有任何getApplication方法它拋出這個錯誤。 :)

相關問題