当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例

当Fragment视图存在时,FragmentActivity如何传值,Fragment如何接收值?求实例

很多方法,handler或者发送广播都可以

使用eventbus进行通讯

1.Fragment是依托于Activity的所以
2.在Fragment的生命周期方法中可以调用getActivity();方法
3.通过此方法获得当前Fragment所依托的Activity的对象
4.既然Activity的对象都获得了那么其中的数据不就也能获得了么

比如:
Activity中:
public class MyActivity extend Fragment Activity{

private List data;
@override
public void onCreate(){
data = new List ;
}
//添加此方法为了在Fragment中获得Activity中数据
public List getData(){
return data;
}
}

Fragment 中:
public class MyFragment extend Fragment{

@override
public view onCreatView(){
        //在生命周期中首先获得依托的Activity的对象
        Activity activity=getActivity();
        List<String> data = activity.getData();
        //现在获得的数据不就是Activity中传过来的么
}

}

1.Fragment是依托于Activity的所以
2.在Fragment的生命周期方法中可以调用getActivity();方法
3.通过此方法获得当前Fragment所依托的Activity的对象
4.既然Activity的对象都获得了那么其中的数据不就也能获得了么

比如:
Activity中:
public class MyActivity extend Fragment Activity{

private List data;
@override
public void onCreate(){
data = new List ;
}
//添加此方法为了在Fragment中获得Activity中数据
public List getData(){
return data;
}
}

Fragment 中:
public class MyFragment extend Fragment{

@override
public view onCreatView(){
        //在生命周期中首先获得依托的Activity的对象
        Activity activity=getActivity();
        List<String> data = activity.getData();
        //现在获得的数据不就是Activity中传过来的么
}

}

fragment 的数据传递分为两种情况

1.在activity中给fragment传递数据:
在activity中传递数据,在fragment中接收数据并显示出来:
把fragment作为一个普通的对象,调用它的方法,把数据传递过去.

2.在fragment中给activity传递数据:
把activity作为一个普通的对象,调用它的方法,把数据传递过去
#第一种情况代码实现
**传递数据

//响应提交按钮的点击事件
public void submit(View v){
    // 1.从输入框中取出数据
    String data = et_data.getText().toString();
    // 2.传递给fragment
    // 把fragment作为一个普通的对象,调用它的方法,把数据传递过去
    f01.getData(data);

}

**接收数据

/**

  • 接收activity传递过来的数据,并显示出来
  • @param data */ public void getData(String data){ tv_data.setText(data); }

#第二种情况的代码实现
注意:在fragment 中的布局文件中 onClick 属性是不起作用的,它只在activity中能使用
fragment 中对于按钮只能使用按钮的点击事件的监听
**传递数据

btn_info.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            // 1.从输入框中取出数据
            String info = et_info.getText().toString();
            // 2.传递给activity
            // 把activity作为一个普通的对象,调用它的方法,把数据传递过去
            // getActivity 得到fragment01所运行在的activity对象
            FragmentActivity activity = getActivity();
            if(activity instanceof MainActivity){
                //做一次强制类型转换
                MainActivity mainActivity = (MainActivity)activity;
                // 把activity作为一个普通的对象,调用它的方法,把数据传递过去
                mainActivity.getInfo(info);
            }
        }
    });

**接收数据

public void getInfo(String info){
//接受fragment传递过来的数据显示在输入框中
et_data.setText(info);
}

建议通过回调接口进行传值。

activity向frament传值直接通过findFragmentById获取实例,然后调用fragment里的方法即可。


  articleFragment = (ArticleFragment) fragmentManager.findFragmentByTag(TAG_ARTICLE);
        if (articleFragment != null) {
            articleFragment.updateArticleView(item);
        } 

fragment向activity传值通过回调接口。activity中实现fragment的接口。在fragment里面回调即可。


 @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnChangeArticleListener) {
            mListener = (OnChangeArticleListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnChangeArticleListener");
        }
    }


        。。。

        holder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (null != mListener) {
                    // Notify the active callbacks interface (the activity, if the
                    // fragment is attached to one) that an item has been selected.
                    mListener.onChangeArticle(holder.mItem);
                }
            }
        });