android Fragment與Activity互動,互相發資料(附圖具體解釋)

來源:互聯網
上載者:User

標籤: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互動,互相發資料(附圖具體解釋)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.