您的位置:首页 > 其它

Fragment与Fragment之间的数据通信

2015-07-10 00:05 225 查看
Fragment与Fragment之间的数据通(FragmentA中向FragmentB发送数据)利用接口回调的方法

在FragmentA中的步骤

1.在FragmentA中定义一个内部接口

publicinterface OnPassValueSelectedListener{

public void putData(Stringvalue);

}

2.在Fragment中定义接口对象

privateOnPassValueSelectedListener mListener;

3.在onAttach方法中将activity强制转换成接口对象

mListener=(OnPassValueSelectedListener) activity;

4.将数据设置到接口方法的参数中

mListener.putData(data);

在Activity中操作步骤:
1.实现FragmentA中的接口,并实现该接口中的方法
2.在该方法中封装数据并通过Bundle将数据发送FragmentB中
Bundlebundle=new Bundle();

bundle.putString("detail",value);

FragmentBfragmentB=new FragmentB();

fragmentB.setArguments(bundle);

FragmentManagermanager=getFragmentManager();

FragmentTransactionfragmentTransaction=manager.beginTransaction();

fragmentTransaction.replace(R.id.ll,fragmentB);

fragmentTransaction.addToBackStack(null);

fragmentTransaction.commit();

在FragmentB中的操作
1.接收数据

Bundlebundle =getArguments();

data=bundle.getString("detail");

=================================================================

代码详情:

public classFragmentA extends Fragment {

private static final StringTAG="FragmentA";

privateOnPassValueSelectedListener mListener;

private ListView lv;

private int width=0;



//定义一个接口,并定义一个回调方法

public interfaceOnPassValueSelectedListener{

public voidputData(String value);

}



@Override

public void onAttach(Activity activity){

// TODO Auto-generated methodstub

super.onAttach(activity);

Log.i(TAG,"-------onAttach-------->>");

try {//多态

mListener =(OnPassValueSelectedListener) activity;

} catch (Exception e) {

throw newClassCastException(activity.toString() + " must implementOnPassValueSelectedListener");

}

}



@SuppressLint("NewApi")

@Override

public void onCreate(BundlesavedInstanceState) {

// TODO Auto-generated methodstub

//获得屏幕宽高

Pointpoint=new Point();

getActivity().getWindowManager().getDefaultDisplay().getSize(point);

width=point.x;

int height=point.y;

getActivity().setTitle(width+ ":" + height);

super.onCreate(savedInstanceState);

Log.i(TAG,"-------onCreate-------->>");

}



@Override

public View onCreateView(LayoutInflaterinflater, ViewGroup container,

BundlesavedInstanceState) {

Log.i(TAG,"-------onCreateView-------->>");

View view=inflater.inflate(R.layout.fragment_a, container, false);

lv=(ListView)view.findViewById(R.id.listView1);

String[]strings=getResources().getStringArray(R.array.move);

ArrayAdapter<String>adapter=newArrayAdapter<String>(getActivity(),android.R.layout.simple_expandable_list_item_1,strings);

lv.setAdapter(adapter);

lv.setOnItemClickListener(newOnItemClickListener() {



@Override

public voidonItemClick(AdapterView<?> parent, View view,

intposition, long id) {

// TODOAuto-generated method stub

InputStreamis;

ByteArrayOutputStreambos=new ByteArrayOutputStream();

Stringdata="";

try {

is=getActivity().getResources().getAssets().open("movie"+position+".txt");

byte[]buffer=newbyte[1024];

intlen=-1;

while((len=is.read(buffer))!=-1) {

bos.write(buffer,0, len);

bos.flush();

}

data=newString(bos.toByteArray(), "utf-8");

} catch(IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

if(width>=200) {

mListener.putData(data);

}else {

Intentintent=new Intent(getActivity(), ContentActivity.class);

Bundlebundle=new Bundle();

intent.putExtra("content",data);

startActivity(intent);



}







}

});

return view;

}





}

1. 在mainActivity中实现在FragmentA中定义的接口,并且封装数据:

packagecom.jason.android12_betweenfragment;



importcom.jason.android12_betweenfragment.FragmentA.OnPassValueSelectedListener;



importandroid.os.Bundle;

importandroid.app.Activity;

importandroid.app.FragmentManager;

importandroid.app.FragmentTransaction;

importandroid.view.Menu;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.widget.Button;



public classMainActivity extends Activity implements OnPassValueSelectedListener{

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);





}



@Override



public void putData(String value) {

//封装数据

Bundle bundle=newBundle();

bundle.putString("detail",value);



FragmentBfragmentB=new FragmentB();

//传递数据

fragmentB.setArguments(bundle);

FragmentManagermanager=getFragmentManager();

FragmentTransactionfragmentTransaction=manager.beginTransaction();

fragmentTransaction.replace(R.id.ll,fragmentB);

fragmentTransaction.addToBackStack(null);

fragmentTransaction.commit();







}

}



2. 在FragmentB中接受数据:

packagecom.jason.android12_betweenfragment;



importandroid.app.Activity;

importandroid.app.Fragment;

importandroid.os.Bundle;

import android.util.Log;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.View.OnClickListener;

importandroid.view.ViewGroup;

importandroid.widget.Button;

importandroid.widget.TextView;



public classFragmentB extends Fragment {

private static final StringTAG="FragmentB";

private String data="";

public FragmentB() {

// TODO Auto-generatedconstructor stub

}



@Override

public void onAttach(Activity activity){

// TODO Auto-generated methodstub

super.onAttach(activity);

Log.i(TAG,"-------onAttach-------->>");

}



@Override

public void onCreate(BundlesavedInstanceState) {

// TODO Auto-generated methodstub

super.onCreate(savedInstanceState);

Log.i(TAG,"-------onCreate-------->>");

Bundlebundle =getArguments();

data=bundle.getString("detail");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: