Data interaction between Android Fragment and Activity

This article implements two functions:

1、在Fragment中通过getActivity获取activity中组件在通过组件获取内容的方法获取activity中的数据。
2、在Activity中通过接口回调的方法获取Fragment中组件的值。

Directory Structure:
Write a picture description here

Effect picture:

Write a picture description here

MainActivity code:

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();
                            }
                        });
            }
        });
    }

}

Code in 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();
    }
}

Layout file code:

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>

For data interaction between Fragment and Fragment, please visit:
http://blog.csdn.net/q296264785/article/details/53169440

Published 34 original articles · Like 10 · Visits 30,000+

Guess you like

Origin blog.csdn.net/q296264785/article/details/53172873