绝密activity与fragment之间传递数据Android工程师

/ 福州大学数学与信息学院Android工程师 / 2017-05-15

android工程师,android开发初学者,android经验分享


一.Fragment中通过getActivity()然后进行强制转化,调用Activity中的公有方法((XXXXActivity)getActivity()).fun()。


二.Activity在切换Fragment的时候,通过setArguments向Fragment传递参数,Fragment通过getArguments();获得从activity中传递过来的值。


三.代码如下:


activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal" >


<LinearLayout

android:layout_width="120dip"

android:layout_height="match_parent"

android:orientation="vertical" >


<TextView

android:id="@+id/tv_data"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Activity界面"

android:textSize="18sp" />


<Button

android:layout_width="120dip"

android:layout_height="wrap_content"

android:onClick="open01"

android:text="fragment01" />


<EditText

android:id="@+id/et_data"

android:layout_width="100dip"

android:layout_height="wrap_content"

android:hint="请输入数据" />


<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="submit"

android:text="提交" />

</LinearLayout>


<View

android:layout_width="1dp"

android:layout_height="match_parent"

android:background="#ff000f" />


<FrameLayout

android:id="@+id/fl_container"

android:layout_width="match_parent"

android:layout_height="match_parent" >

</FrameLayout>


</LinearLayout>


f01.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:background="#00ffff"

android:orientation="vertical" >


<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Frgment01界面"

android:textSize="18sp" />


<TextView

android:id="@+id/tv_data"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="25sp" />


<EditText

android:id="@+id/et_info"

android:layout_width="150dip"

android:layout_height="wrap_content"

android:hint="请输入信息" />


<Button

android:id="@+id/btn_info"

android:layout_width="150dip"

android:layout_height="wrap_content"

android:text="传递" />


</LinearLayout>


MainActivity.java


package com.example.fragment;


import android.os.Bundle;

import android.support.v4.app.FragmentActivity;

import android.support.v4.app.FragmentManager;

import android.support.v4.app.FragmentTransaction;

import android.view.View;

import android.widget.EditText;


public class MainActivity extends FragmentActivity {


private Fragment01 f01;

private FragmentManager fm;

private EditText et_data;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);


et_data = (EditText) findViewById(R.id.et_data);


f01 = new Fragment01();


// 得到fragment的管理器,可以得到fragment的事务管理器

fm = this.getSupportFragmentManager();


open01(null);

}


public void open01(View view) {


// Fragment01 f01= new Fragment01();


// 得到fragment的事务管理器,可以填充fragment的界面

// 事务可以保证加载的多个fragment要么同时显示成功要么同时显示失败

FragmentTransaction ft = fm.beginTransaction();

// 把f01显示在framelayout界面中

ft.replace(R.id.fl_container, f01);

// 提交事务

ft.commit();

}


// Activity传递数据给fragment

public void submit(View v) {

// 传递数据给fragment01界面

String data = et_data.getText().toString().trim();

// 把data传给fragment01

// 把fragment01作为一个普通的对象,调用它的方法传递参数

// Fragment01 f01 = new Fragment01();

// activity中设置数据,对应fragment有获取数据的方法。

f01.setData(data);

}


// 获取fragment传递过来的数据。

public void setInfo(String info) {

et_data.setText(info);


}


}

fragment01.xml


package com.example.fragment;


import android.os.Bundle;

import android.support.v4.app.Fragment;

import android.support.v4.app.FragmentActivity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;


public class Fragment01 extends Fragment {


private View view;


@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// 加载布局文件

// getActivity() fragment所运行在的activity

// resource fragment的布局文件资源ID

// root 父级控件,通常使用null


view = View.inflate(getActivity(), R.layout.f01, null);


// 从view中找到按钮

Button btn_info = (Button) view.findViewById(R.id.btn_info);

btn_info.setOnClickListener(new OnClickListener() {


@Override

public void onClick(View v) {


EditText et_info = (EditText) view.findViewById(R.id.et_info);

String info = et_info.getText().toString().trim();

// 把MainActivity作为一个普通的对象,调用它的方法传递参数

FragmentActivity activity = getActivity();

// 判断activity是否是MainActivity类型的

if (activity instanceof MainActivity) {

MainActivity mainActivity = (MainActivity) activity;

// 调用activity的方法传递参数

mainActivity.setInfo(info);

}


}

});

return view;

}


// fragment传递数据给activity

public void setData(String data) {

TextView tv_data = (TextView) view.findViewById(R.id.tv_data);

tv_data.setText(data);


}


}


总结:无论是activity给fragment传递数据,还是fragment给activity传递数据,都把activity和fragment都当做一个普通的对象,调用它的方法,传递参数。




公众号,微信

汇鱼网海峡创乐汇
汇鱼网海峡创乐汇