Android 如何在ActionProvider和主活动之间进行通信
我正在尝试使用自定义ActionProvider,下面是代码,但我不知道如何控制MainActivity中的视图,如何在下面的代码“OnClick”函数中控制MainActivity中的组件Android 如何在ActionProvider和主活动之间进行通信,android,view,Android,View,我正在尝试使用自定义ActionProvider,下面是代码,但我不知道如何控制MainActivity中的视图,如何在下面的代码“OnClick”函数中控制MainActivity中的组件 public class CustomActionProvider extends ActionProvider { Context mContext; public CustomActionProvider(Context context) { super(context); mConte
public class CustomActionProvider extends ActionProvider {
Context mContext;
public CustomActionProvider(Context context) {
super(context);
mContext = context;
}
@Override
public View onCreateActionView(MenuItem forItem) {
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
View view = layoutInflater.inflate(R.layout.actionbar,null);
Button red = (Button)view.findViewById(R.id.button_red);
red.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
//What should I put here to control components of MainActivity
}
}
);
return view;
}
我不确定这是一种安全/正确的方法,但是: 在您的
活动中
:
//Define an Activity static member
private static Activity myActivity;
//Define getter method
public static Activity getMyActivity(){
return myActivity;
}
//In onCreate set myActivity=this.
然后在您的操作提供程序中
:
private Activity myActivity = MyActivity.getMyActivity();
我在申请表中也是这样写的,如果有人有更好的建议,欢迎他/她
编辑
您还可以发送广播消息并扩展自己的
广播接收器
,以便ActionProvider与活动I see 2解决方案进行通信:
1) 使用LocalBroadcastManager。从ActionProvider发送广播意图,并在活动中实现广播接收器。数据必须可打包/序列化
2) 在ActionProvider上创建公共方法以设置侦听器。从活动的onCreateOptionMenu()方法的MenuItem中检索ActionProvider实例,并调用setListener()方法设置活动的侦听器。禁止保留对活动的静态引用,因为它会导致内存泄漏。