getApplication在onClick方法中使用

时间:2011-12-30 02:55:20

标签: android

我使用Application访问我的数据。 虽然可以点击,但我想使用Application中的数据。 我使用下面的代码:

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?

5 个答案:

答案 0 :(得分:4)

通过getApplication(),我假设您指的是Activity.getApplication() 在这种情况下,如果您删除this它应该工作。

MyData md = (MyData)getApplication();

答案 1 :(得分:2)

你可以这么做,

设置名称 -

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

获取名称 -

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

答案 2 :(得分:1)

假设您的班级名为ExampleonCreate你能做到:
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。这也应该有用。

答案 3 :(得分:1)

java中的“this”表示您所在的课程。

因此,您在onClick(View 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。

答案 4 :(得分: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()因为"这个"你用过将指向View.onClickLIstener方法....因为它没有任何getApplication方法它抛出这个错误。 :)