2011-12-30 106 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方法它抛出这个错误。 :)