我有一个容器,其中有两个片段,我的第一个片段工作正常,我想将它发送到第二个片段。 这是我的第一篇片段
private class LoadLink extends AsyncTask<String, Void, String[]> {
@Override
protected String[] doInBackground(String... params) {
Document document = null;
try {
document = Jsoup.connect(params[0].toString()).timeout(10 * 1000).userAgent("Mozilla").get();
download = document.getElementsByClass("actions").first().select("a").attr("href").toString();
} catch (Exception e) {
e.printStackTrace();
}
return new String[]{download, params[1]};
}
}
现在我想知道如何在我的第二个片段中接收它
答案 0 :(得分:3)
首先使用接口作为回调与托管fragment1的活动进行通信。然后你可以与fragment2进行通信。
您可以找到更多信息和代码片段
http://developer.android.com/training/basics/fragments/communicating.html
示例:
FragmentOne ---&gt; MainActivity ---&gt; FramentTwo
MainActivity实现接口ReturnData
并覆盖senData
public class MainActivity extends Activity implements ReturnData{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FragmentOne newFragment = new FragmentOne();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
@Override
public void sendData(String result) {
// TODO Auto-generated method stub
FragmentTwo newFragment = new FragmentTwo();
Bundle args = new Bundle();
args.putString("key",result);
newFragment.setArguments(args);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.container, newFragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
activity_main.xml中
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:id="@+id/container"
android:layout_height="fill_parent" >
</FrameLayout>
布局有FrameLayout
,是您添加/替换framgents的视图组
FragmentOne.java
FragmentOne使用interface作为活动的回调来传达价值。
public class FragmentOne extends Fragment {
public interface ReturnData
{
public void sendData(String result);
}
ReturnData mCallback;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (ReturnData) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement ReturnData");
}
}
TextView tv2;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag1,container,false);
tv2 = (TextView) rootView.findViewById(R.id.textView2);
Button b= (Button) rootView.findViewById(R.id.button1);
b.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mCallback.sendData(tv2.getText().toString());
}
});
return rootView;
}
}
frag1.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="88dp"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="46dp"
android:text="This is Fragment One" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_centerHorizontal="true"
android:layout_marginTop="82dp"
android:text="Hello is communicated to Fragment Two on Button Click" />
</RelativeLayout>
FragmentTwo
public class FragmentTwo extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag2,container,false);
TextView tv1 = (TextView) rootView.findViewById(R.id.textView1);
String text = getArguments().getString("key");
tv1.append(text);
return rootView;
}
}
frag2.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="36dp"
android:text="Display : " />
</RelativeLayout>
扣