gpt4 book ai didi

android - 在回调中使用正确的上下文

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:34:51 25 4
gpt4 key购买 nike

标题几乎说明了一切。如果你有一个从一个类到另一个类的回调,并且需要从需要上下文的回调中调用一些方法,那么正确的上下文是什么?一个常见的例子是 AsyncTask,它带有对使用它的 ActivityFragment 的回调。

我通常尽量避免使用 getApplicationContext() 但我不能使用 this 作为回调中的上下文。在这种情况下,使用更广泛的上下文是否合适?

为了进一步说明,我正在考虑在 AsyncTask 和 Activity 之间使用接口(interface)的回调。一旦我进入重写的接口(interface)方法,我就无法从那里获取 Activity 上下文。

最佳答案

使用 Activity 的上下文。示例:

MyAsyncTask mat = new MyAsyncTask(this);

MyAsyncTask 构造函数:

public MyAsyncTask(MyActivity context) {
mContext = context;
}

MyAsyncTask 中调用 MyActivity 的方法 methodToCall():

((MyActivity)mContext).methodToCall();

编辑 1:

我猜你的问题是这样的:

public class MyActivity extends Activity {

Button b;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.some_layout);

b = (Button) findViewById(...);

b.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Button newButton = new Button(this); // Won't work!!
}
});
}
}

解决方法:

  • 在MyActivity中声明一个方法:getContext()

    public Context getContext() {
    return (Context)this;
    }

    b.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    Button newButton = new Button(getContext()); // Will work
    }
    });
  • 使用 MyActivity.this 代替 this

  • 另一种方式是声明 MyActivity 实现接口(interface):

    public class MyActivity extends Activity implements View.OnClickListener {

    ....
    ....

    @Override
    public void onClick(View v) {
    Button newButton = Button (this) // Will Work
    }
    }

关于android - 在回调中使用正确的上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com