我想在活动中调用方法,并从android中的非活动常规类向其传递参数。 据我了解,我不能简单地使用以下代码,而且它不起作用:
int mySound = 0;
SoundsActivity soundsActivity = new SoundsActivity();
soundsActivity.playSound(mySound);
该代码位于名为“ MyAdapter”的常规类中。
答案 0 :(得分:0)
有几种方法可以执行此操作。由于您实际上没有显示任何代码,我无法具体说明。
尽管如此,您还是无法做您想做的事情。无法像这样实例化活动(以及扩展Context的任何内容),它也不会做您想要的事情。
使用广播。
这将需要您将Context对象传递到适配器中,只需修改构造函数并添加全局变量即可完成此操作:
private Context context;
public MyAdapter(Context context) {
this.context = context;
}
然后,您可以使用该上下文以自己的操作发送本地广播:
Intent intent = new Intent("my_custom_action");
intent.putExtra("sound_type", 0);
LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
并在“活动”中接收该操作以调用您的方法:See Context-registered Receivers
构造适配器时,将Context对象传递给它。如果您是通过Activity(最好是SoundsActivity)构造的,请使用this
:
MyAdapter adapter = new MyAdapter(this);
使用回调。
Delcare某处的界面:
public interface AdapterCallback {
void onRequestPlaySound(int type);
}
在“活动”中实现该界面:
public class SoundsActivity extends Activity implements AdapterCallback {
//...
@Override
public void onRequestPlaySound(int type) {
playSound(type);
}
//...
}
将该接口添加为适配器的构造函数中的参数:
private AdapterCallback callback;
public MyAdapter(AdapterCallback callback) {
this.callback = callback;
}
然后在需要的地方使用callback.onRequestPlaySound(0);
。
构造适配器时,将您的SoundsActivity实例传递给它。仅当您从SoundsActivity构建适配器时才有效:
MyAdapter adapter = new MyAdapter(this);
直接传递SoundsActivity。
这不是最干净的方法,也不是推荐的方法,但是它可以工作。在您的适配器中:
private SoundsActivity activity;
public MyAdapter(SoundsActivity activity) {
this.activity = activity;
}
并且来自SoundsActivity:
MyAdapter adapter = new MyAdapter(this);
然后在需要的地方致电activity.playSound(0);
。