Android之Fragment、Activity之间的通信

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36942194/article/details/82464790

1.Activity向Fragment传递消息

.
方法一:通过Bundle,setArguments(),getArguments()来传递消息:

Activity中setArguments():

Fragment1 fragment1 = new Fragment1();
Bundle bundle = new Bundle();
bundle.putInt("key",value);
fragment.setArguments(bundle);

Fragment中getArguments():

Bundle bundle = new Bundle();
int a = bundle.getInt("key");

当然也可以这样写
Activity中创建Fragment:

Fragment1 fragment1 = Fragment1.newInstance("我是String");

Fragment:

public class Fragment1 extends Fragment{

    private Context context;
    private String s;

    public static Fragment1 newInstance(String value) {
        Fragment1 fragment1 = new Fragment1();
        Bundle args = new Bundle();
        args.putString("key", value);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            s = getArguments().getString("key");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment, null);
        context = getActivity();
        return view;
    }
}

方法二:通过Fragment中直接new一个Activity:

Activity中创建一个public的变量或者方法:

public static int a;

public void ActivityToFragment(){
//TODO:这是方法
}

Fragment中获得Activity的信息:

MainActivity activity = (MainActivity) getActivity();

//执行Activity中的ActivityToFragment方法,其实这个也可以用来作为Fragment传递值给Activity,
//在ActivityToFragment()中 添加ActivityToFragment("abc");然后去Activity中把这个"abc"用起来。
activity.ActivityToFragment();

//获取Activity中的a
int a = activity.a;

##2.Fragment向Activity传递消息##

方法一:通过接口回调

fragment中写好接口

private CallBackListener callBackListener;//声明内部定义的回调接口

	@Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        callBackListener= (CallBackListener)activity;
    }
    
//在需要使用的地方加入接口回调,比如按了某个按钮
btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
	            String value = "这是Fragment1中传递过来的值";
                callBackListener.CallBack();
                callBackListener.CallBack2(value);
            }
        });
 
public static interface CallBackListener{
	public void CallBack();
	public void CallBack2(String str);//向Activity传值
}

在父Activity中需要实现Fragment中的接口:

public class MainActivity extends Activity implements Fragment1.CallBackListener{

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

    @Override
    public void onCallBack() {
	    //TODO:做需要做的事
    }

	@Override
    public void onCallBack(String str) {
	    //TODO:str传递过来的值
        Toast.makeText(this,str,Toast.LENGTH_SHORT).show();
    }
}

3.Fragment和Fragment传递消息

通过他们共同的Activity进行,其实也就是上面的两种方法结合用。在Activity中添加一个临时的值,用来传递。

当然都可以通过EventBus来传递消息。##

展开阅读全文

没有更多推荐了,返回首页