標籤:html fill ini tostring string cti void 輸入 通過
筆者最近看官方training。發現了非常多實用又好玩的知識。
當中。fragment與Activity通訊就是一個。
fragment與Activity通訊主要是兩點:
1、fragment傳遞資訊給Activity
此點是通過在fragment中定義介面與Activity共用資料。
2、Activity傳遞資訊給fragment
此點主要是通過fragment的getArgument()和setArgument()兩個函數傳遞bundle來傳遞。
效果:(最後附上原始碼)
主要流程:
1、在MainActivity中設定一個fragment容器,在MainActivity初始化的時候替換成OneFragment。
2、OneFragment中因為定義了介面,在MainActivity中實現了此介面。當點擊button的時候會實現此介面中的函數,而且和Activity共用此資料。
(也就是EditText中的內容)
3、MainActivity中擷取到資料後,建立一個新的TwoFragment。而且使用Fragment的setArgument()方法把擷取到的資料傳遞到TwoFragment,TwoFragment使用getArgument()接收。
代碼:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
MainActivity:
package com.example.trainingfragment;import android.app.Activity;import android.app.FragmentManager;import android.app.FragmentTransaction;import android.os.Bundle;public class MainActivity extends Activity implements OneFragment.OnOneFragmentClickListener{ private FragmentManager fm; private FragmentTransaction ft; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fm=getFragmentManager(); ft=fm.beginTransaction(); ft.replace(R.id.fragment_container,new OneFragment()); //使用FragmentTransaction一定不要忘記提交 ft.commit(); } @Override public void onArticleClick(String text) { //此處定義一個新的TwoFragment //而且把在OneFragment擷取到的text傳入TwoFragment TwoFragment newFragment = new TwoFragment(); Bundle args=new Bundle(); args.putString("text", text); newFragment.setArguments(args); //因為之前的一個FragmentTransaction已經提交過,所以此處須要又一次定義 ft=fm.beginTransaction(); ft.replace(R.id.fragment_container, newFragment); //使用FragmentTransaction一定不要忘記提交 ft.commit(); }}
OneFragment:
package com.example.trainingfragment;import android.app.Activity;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.Button;import android.widget.EditText;/** * 項目名稱:TrainingFragment * 類描寫敘述: * 建立人:佳佳 * 建立時間:2016/3/25 17:57 * 改動人:佳佳 * 改動時間:2016/3/25 17:57 * 改動備忘: */public class OneFragment extends Fragment { OnOneFragmentClickListener mCallback; private EditText et; private Button btn; //此處定義介面 public interface OnOneFragmentClickListener { //在介面中定義函數 void onArticleClick(String text); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_one,container,false); et=(EditText)view.findViewById(R.id.et_one); btn=(Button)view.findViewById(R.id.btn_one); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mCallback.onArticleClick(et.getText().toString()); } }); return view; } @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mCallback = (OnOneFragmentClickListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } }}
TwoFragment:
package com.example.trainingfragment;import android.app.Fragment;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;/** * 項目名稱:TrainingFragment * 類描寫敘述: * 建立人:佳佳 * 建立時間:2016/3/25 17:57 * 改動人:佳佳 * 改動時間:2016/3/25 17:57 * 改動備忘: */public class TwoFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_two, container, false); } @Override public void onStart() { super.onStart(); //擷取Activity傳遞過來的資料而且顯示到 Bundle args=getArguments(); setMyText(args.getString("text")); } public void setMyText(String text) { TextView tv=(TextView)getActivity().findViewById(R.id.tv_two); tv.setText(text); }}
activity_main:
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" />
fragment_one:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp"> <EditText android:id="@+id/et_one" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入要傳遞的內容" /> <Button android:id="@+id/btn_one" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="跳轉並傳遞" android:textSize="20sp" /></LinearLayout>
fragment_two:
<?xml version="1.0" encoding="utf-8"?
><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="10dp"> <EditText android:id="@+id/et_one" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="請輸入要傳遞的內容" /> <Button android:id="@+id/btn_one" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="跳轉並傳遞" android:textSize="20sp" /></LinearLayout>
原始碼地址:http://download.csdn.net/detail/double2hao/9472978
android Fragment與Activity互動,互相發資料(附圖具體解釋)