android Fragment與Activity之間數據交互

本文實現了兩個功能:

1、在Fragment中通過getActivity獲取activity中組件在通過組件獲取內容的方法獲取activity中的數據。
2、在Activity中通過接口回調的方法獲取Fragment中組件的值。

目錄結構:
這裏寫圖片描述

效果圖:

這裏寫圖片描述

MainActivity代碼:

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;

import com.example.class_fragment_activity_communicating_data.Fragment1.CallBack;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FragmentManager manager = getFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        final Fragment1 fragment1 = new Fragment1();
        transaction.add(R.id.right, fragment1, "fragment1");
        transaction.commit();
        findViewById(R.id.A_button1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                fragment1.getEditText(new CallBack() {
                // 通過接口回調獲取Fragment中的值

                            @Override
                            public void getData(String str) {
                                // TODO Auto-generated method stub
                                Toast.makeText(MainActivity.this, str, 1)
                                        .show();
                            }
                        });
            }
        });
    }

}

Fragment中代碼:

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.Toast;

public class Fragment1 extends Fragment {
    private EditText editText;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        View view = inflater.inflate(R.layout.fragment1_layout, null);
        editText = (EditText) view.findViewById(R.id.editText1);
        view.findViewById(R.id.button1).setOnClickListener(
                new OnClickListener() {

                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        EditText editText = (EditText) getActivity()
                                .findViewById(R.id.editText1);
// 通過getAcitivity獲取Activity中的組件再獲取Activity中的值
                        Toast.makeText(getActivity(),
                                editText.getText().toString(), 1).show();
                    }
                });
        return view;
    }

    // 接口回調
    //創建一個方法,傳遞一個接口作爲參數
    public void getEditText(CallBack callBack) {
        //調用該接口的方法並且將需要傳遞給Activity的值作爲該方法的參數
        callBack.getData(editText.getText().toString());
    }
    //創建一個接口定義一個方法getData將需要傳遞給Activity的值的類型作爲參數類型
    public interface CallBack {
        public void getData(String str);
    }

    @Override
    public void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
    }
}

佈局文件代碼:

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/left"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:background="#cccccc"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/editText1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="Activity文本輸入框" >

            <requestFocus />
        </EditText>

        <Button
            android:id="@+id/A_button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="點擊獲取Fragment中文本輸入框的值" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/right"
        android:layout_width="0dp"
        android:layout_height="fill_parent"
        android:layout_weight="2"
        android:background="#ccddcc"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="horizontal" >
    </LinearLayout>

</LinearLayout>

fragment1_layout.xml

<?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" >
    <Button
            android:id="@+id/button1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="在Fragment中讀取Activity組件中的值" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Fragment 文本輸入框">
        <requestFocus />
    </EditText>

</LinearLayout>

Fragment 與 Fragment之間數據的交互請訪問:
http://blog.csdn.net/q296264785/article/details/53169440

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章