Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在ActionProvider和主活动之间进行通信_Android_View - Fatal编程技术网

Android 如何在ActionProvider和主活动之间进行通信

Android 如何在ActionProvider和主活动之间进行通信,android,view,Android,View,我正在尝试使用自定义ActionProvider,下面是代码,但我不知道如何控制MainActivity中的视图,如何在下面的代码“OnClick”函数中控制MainActivity中的组件 public class CustomActionProvider extends ActionProvider { Context mContext; public CustomActionProvider(Context context) { super(context); mConte

我正在尝试使用自定义ActionProvider,下面是代码,但我不知道如何控制MainActivity中的视图,如何在下面的代码“OnClick”函数中控制MainActivity中的组件

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()方法设置活动的侦听器。

禁止保留对活动的静态引用,因为它会导致内存泄漏。