使用fragment在activity中传值的例子

原创 2015年11月20日 18:31:08

有时,根据项目需要,我们需要在fragment中传值给下一个activity,然后下一个ac设置值再回传给fragment中显示;

这个时候就要用到了startActivityForResult和onActivityResult这2个方法

个人的理解是,这2个方法一定要用fragment自己的写,不要写在Activity中。


来看一个例子

1、建立一个MainActivity,继承了FragmentActivity

package com.example.fragmentdelivery;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import android.view.MenuItem;


public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //这里的布局就放一个fragmentOne,所有的方法都写在这个fragmentOne里
        setContentView(R.layout.activity_main);
    }

}
然后是这个MainActivity中的布局,可以看到,里面就只包含有1个fragment

<RelativeLayout 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"
   >

    <fragment
        class="com.example.fragmentdelivery.FragmentOne"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
       />

</RelativeLayout>

2、然后我们新建一个FragmentOne的类,继承了Fragment,看看fragment里面的代码;

注意,startActivityForResult和onActivityResult这2个方法都是在本fragment中里面写的

package com.example.fragmentdelivery;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class FragmentOne extends Fragment {

	private TextView text;
	private Button button;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = View.inflate(getActivity(), R.layout.fragment1, null);
		text = (TextView) view.findViewById(R.id.textView);
		button = (Button) view.findViewById(R.id.button1);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				Intent intent = new Intent(getActivity(), SecondActivity.class);
				intent.putExtra("name", "这个是第一个Activity传递过来的是数据");
				startActivityForResult(intent, 1);
			}
		});
		return view;
	}

	//注意:这里要重给fragment的onActivityResult()方法
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		if (requestCode == 1 && resultCode == 3) {
			String str = data.getStringExtra("result");
			text.setText(str);
		}
	}
}

然后是FragmentOne的布局

<RelativeLayout 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"
    tools:context="cn.itcast.fragment.MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="30sp"
        android:text="默认值"
        android:background="#84ff84" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:onClick="deliveryMessage"
        android:text="进入下一个ac" />

</RelativeLayout>
FragmentOne的效果如下


3、然后我们创建第2个Activity,在第2个ac中使用setResult方法,把值回传给FragmentOne

package com.example.fragmentdelivery;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class SecondActivity extends FragmentActivity {

	private Button button;
	private TextView txt;
	private Intent intent2=new Intent();
	
	private Intent inte;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main2);
		
		button = (Button) findViewById(R.id.back);
		txt=(TextView) findViewById(R.id.Text1);
		inte=getIntent();
		txt.setText(inte.getStringExtra("name"));//这里是显示,由第1个Activity传递过来的是数据
		
		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				intent2.putExtra("result", "这个是SecondActivity传递过来的数据");//把这里的值回传给FragmentOne中去展示
				setResult(3, intent2);
				finish();

			}
		});

	}

}
然后看看SecondActivity中的xml布局

<RelativeLayout 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"
   >

   <Button 
       android:id="@+id/back"
       android:layout_width="wrap_content"
       
       android:layout_height="wrap_content"
       android:text="返回"
       />

   <TextView
       android:id="@+id/Text1"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_below="@+id/back"
       android:layout_centerHorizontal="true"
       android:layout_marginTop="92dp"
       android:text="hehehe "
   >
   </TextView>

</RelativeLayout>
这个布局的效果如下


====================分割线============================

所有的代码都完成了,最后看看流程

1、进入MainActivity ,点击按钮,会进入SecondActivity,因为我们在这里用Intent传值给SecondActivity,

	Intent intent = new Intent(getActivity(), SecondActivity.class);
	intent.putExtra("name", "这个是第一个Activity传递过来的是数据");
	startActivityForResult(intent, 1);
所以SecondActivity会显示如下



2、点击上面的返回按钮,会执行以下语句,把后面的字符串传递给FragmentOne中去展示

		intent2.putExtra("result", "这个是SecondActivity传递过来的数据");//把这里的值回传给FragmentOne中去展示
		setResult(3, intent2);
		finish();
效果如下



表示从SecondActivity中传递出来的值已经是正确显示了。



项目源码








版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28746251/article/details/49950523

史上最简单的的Activity嵌套fragment

首先声明三点: 1、在需要嵌套Fragment的activity必须继承android.support.v4.app.FragmentActivity 2、嵌套的Fragment必须继承andro...
  • u014074418
  • u014074418
  • 2016-12-07 17:00:20
  • 3448

基于Android Fragment功能的例子

通过最近空闲时候对Fragment的学习,尝试着写了一个小Demo,将在开发的时候能常用到的Fragment知识放在一起,写过了这个Demo对Android Fragment的了解更加深入了,以后做起...
  • eyu8874521
  • eyu8874521
  • 2012-12-07 09:14:18
  • 74890

<em>Fragment</em>与<em>Activity</em>之间通信实例

<em>例子</em>主要包括<em>Fragment</em>与<em>Activity</em>之间的通信,代码中还给出了两者之间通信具体调用的函数及其顺序。
  • 2018年04月06日 00:00

安卓中回调实现Fragment向Activity传值

1.创建主布局文件
  • my_worldlet
  • my_worldlet
  • 2015-09-15 20:31:10
  • 1436

Fragment和FragmentActivity的使用方法 .

认识:首先我们知道Fragment是我们在单个Activity上要切换多个UI界面,显示不同内容。模块化这些UI面板以便提供给其他Acitivity使用便利。同时我们显示的Fragment也会受到当前...
  • jdsjlzx
  • jdsjlzx
  • 2012-06-20 00:23:15
  • 92289

fragment简单例子

Android Fragment完全解析,关于碎片你所需知道的一切 分类: Android疑难解析 2013-05-07 09:33 5093人阅读 评论(21) 收藏 举报 android...
  • u011382076
  • u011382076
  • 2013-09-02 10:33:45
  • 1110

Fragment传值的两种方式

FRAGMENT参数传递方法一 在Activity中定义一个字段、然后添加set和get方法、代码如下、mTitle就是要传递的参数、如果是传递对象、可以把mTitle换成一个对象即可 pub...
  • JerryWu145
  • JerryWu145
  • 2016-08-02 13:59:00
  • 547

Fragment向另一个Activity传值

Fragment中    Intent intent = new Intent(getActivity().getApplicationContext(), WeiZhangActivity.cla...
  • tiantian_kuaile
  • tiantian_kuaile
  • 2016-10-27 22:03:17
  • 964

android中fragment与activity之间通信原理以及例子

转自   http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1016/441.html 首先,如果你想在andro...
  • guozh
  • guozh
  • 2014-05-08 17:45:29
  • 40274

<em>Fragment</em>与<em>Activity</em>通信的小<em>例子</em>

举报人: 被举报人: my1314my 举报的资源分: 3 *类型: *详细原因: 取  消 提  交 <em>Fragment</em>与<em>Activity</em>通信的小<em>例子</em> 3积分 立即下载 ...
  • 2018年04月01日 00:00
收藏助手
不良信息举报
您举报文章:使用fragment在activity中传值的例子
举报原因:
原因补充:

(最多只允许输入30个字)