Android 之在Activity中fragment相互通信

這裏寫圖片描述

如圖所示:一個activity中,放了兩個fragment,現在要把fragmentA中的數據,在fragmentB中顯示出來,怎麼做呢?

思路:首先想到的是利用接口回調,因爲接口確實是一個很好的俄東西,不用不知道它的好處。。。。

上代碼:看如何巧用接口進行的通訊

第一步:定義一個接口:

/** 
 * @author 作者名 易皇星
 * @email  郵箱名 [email protected]
 * @time   2016-5-9 2016-05
 * @TODO 緣分是本書,翻得不經意會錯過,讀得太認真會流淚!
 * 
 * 
 *   接口是史上最好的回調
 */

public interface OnArticleSelectedListener {


     public void onArticleSelected(String msg);  
}

第二步:在MainActivity實現這個接口

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.widget.TextView;

public class MainActivity extends FragmentActivity implements  OnArticleSelectedListener {

    private TextView tv_show;
    private String msg;
    private LeftFragment mlFragment=new LeftFragment();
    private RightFragment mrFragment=new RightFragment();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        FragmentTransaction beginTransaction = getSupportFragmentManager().beginTransaction();
        beginTransaction.replace(R.id.fl_fragmentA, mlFragment);
        beginTransaction.commit();

        FragmentTransaction beginTransaction1 = getSupportFragmentManager().beginTransaction();
        beginTransaction1.replace(R.id.fl_fragmentB, mrFragment);
        beginTransaction1.commit();


    }

    @Override
    public void onArticleSelected(String msg) {

        mrFragment.update(msg);

    }

第三步:看看fragment 怎麼利用接口的吧:

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 *  * 當fragment添加到activity中時,會調用fragment的方法onAttach(),
 * 這個方法中適合檢查activity是否實現了OnArticleSelectedListener接口,
 * 檢查方法就是對傳入的activity的實例進行類型轉換
 *
 *
 */
public class LeftFragment extends Fragment {
    private OnArticleSelectedListener mListener;
    private TextView tv_text_left;


    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            mListener =(OnArticleSelectedListener)context;
        }catch (Exception ex){

            throw new ClassCastException(context.toString()+"must implement OnArticleSelectedListener");
        }
    }

    private View view;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
         view=inflater.inflate(R.layout.fragment_left, container, false);
        tv_text_left= (TextView) view.findViewById(R.id.tv_left_text);

        tv_text_left.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(null!=mListener){
                    mListener.onArticleSelected(tv_text_left.getText().toString());
                }

            }
        });




        return view;
    }


}

RigntFragment

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;


public class RightFragment extends Fragment {
    private TextView tv_text_right;



    private  View view;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        view=inflater.inflate(R.layout.fragment_right, container, false);

        tv_text_right= (TextView) view.findViewById(R.id.tv_text_right);
        return view;
    }

//定義一個方法
    public void update(String msg){

        tv_text_right.setText(msg);
    }
}

效果圖:
這裏寫圖片描述

猛戳這裏:studio點擊下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章