如圖所示:一個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點擊下載