Android学习Android

Fragment与Activity的相互通信

2017-07-07  本文已影响34人  Scorpio_青牙

FragmentActivity向Fragment中传递参数我想不用我说太多大家都知道,在此只做简单的说明:
FragmentActivity传递参数给Fragment使用:

Bundle bundle = new Bundle();
Fragment.setArguments(bundle)

Fragment中获取数据使用:

Bundle bundle = getArguments();

下面我重点说下FragmentActivity与Fragment间的相互通信

首先定义一个公共接口

/**
 * FragmentActivity 与 Fragment交互接口 
 */
public interface IMutualListener {

    /**
     * FragmentActivity用来改变Fragment中的展示内容
     */
    void actMsg(String str);

    /**
     * Fragment用来改变FragmentActivity中的展示内容
     */
    void fragmentMsg(String str);

}

FragmentActivity与Fragment分别去实现这个接口, 且Activity中需要重写onAttachFragment方法、而Fragment中需要重写onAttach方法事例如下:

/**
 * FragmentActivity中调用接口的方式
 */
public class MainActivity extends FragmentActivity implements  IMutualListener{

    private IMutualListener iMutualListener;
    private TextView tv;
    @Override  
  protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);
     tv = (TextView)findViewById(R.id.tv)
        //改变fragment中的值
    findViewById(R.id.btn).setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                //FragmentActivity调用Fragment中方法前需要判断该Fragment是否为null
                iMutualListener.actMsg("我是来自FragmentActivity的信息");
            }
        });  
    
  }  

    @Override
    public void onAttachFragment(Fragment fragment) {
        try{
            iMutualListener = (IMutualListener)fragment;
        }catch (Exception e){}
        super.onAttachFragment(fragment);
    }

    /**
     * FragmentActivity用来改变Fragment中的展示内容
     */
    @Override
    public void actMsg(String str) {}

    /**
     * Fragment用来改变FragmentActivity中的展示内容
     */
    @Override
    public void fragmentMsg(String str) {
        tv.setText(str);
    }
}
/**
 * Fragment中调用接口的方式
 */
 public class FragmentA extends Fragment implements  IMutualListener{

    private IMutualListener iMutualListener;
    private TextView tv;
     @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = View.inflate(getActivity(), R.layout.fragment_a_page, null);
        tv = (TextView) view.findViewById(R.id.tv)
        //改变fragmentActivity中的值
    view.findViewById(R.id.btn).setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                iMutualListener.fragmentMsg("我是来自Fragment的信息");
            }
        });  
    }

    @Override
    public void onAttach(Activity activity) {

        try {
            iMutualListener = (IMutualListener)activity;
        }catch (Exception e){
            throw new ClassCastException(activity.toString() + "must implement iMutualListener");
        }

        super.onAttach(activity);
    }

    /**
     * FragmentActivity用来改变Fragment中的展示内容
     */
    @Override
    public void actMsg(String str) {
        tv.setText(str);
    }

    /**
     * Fragment用来改变FragmentActivity中的展示内容
     */
    @Override
    public void fragmentMsg(String str) {}

 }

FragmentActivity与Fragment的交互主要部分就是onAttachFragment与onAttach方法的重写,希望本篇文章能对你有所帮助!

201707071316.jpg
上一篇下一篇

猜你喜欢

热点阅读