使用fragment在activity中传值的例子
来源:互联网 发布:windows用mac的硬盘 编辑:程序博客网 时间:2024/05/18 01:35
有时,根据项目需要,我们需要在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;@Overridepublic 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;@Overrideprotected 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() {@Overridepublic 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中传递出来的值已经是正确显示了。
项目源码
0 0
- 使用fragment在activity中传值的例子
- 在使用fragment的activity双击点击退出程序
- ButterKnife在activity和Fragment中使用的区别
- ViewPage+Fragment的使用例子
- ViewPage+Fragment的使用例子
- ViewPage+Fragment的使用例子
- EventBus在Activity、Fragment、Service中的使用
- 在Activity,Fragment,嵌套Fragment中使用ToolBar
- Activity与在Android的碎片Fragment
- Fragment在Activity上面
- Fragment和Activity之间的依附使用
- 在activity中使用多个fragment时设置第一个fragment的沉浸栏有效,其他无效解决办法
- 在activity中使用多个fragment时设置第一个fragment的沉浸栏有效,其他无效解决办法
- ViewPage和Fragment一起使用的例子
- Android Fragment的使用 三 Fragment与Activity交互
- 在Activity/Fragment以外使用Toast(涉及到对context上下文的理解与运用)
- 使用Intent在Activity与Fragment之间传递数据中存在的返回键错乱问题
- 当Activity在不继承FragmengActivity的情况下,Fragment中集成ViewpagerIndicator使用详解
- spring的aop编程
- 游戏引擎中三大及时光照渲染方法介绍(以unity3d为例)
- Python 列表、元组、字典、字符串
- C++ Builder实现MessageBox拦截
- C# 获取IE浏览器句柄
- 使用fragment在activity中传值的例子
- Gradle 教程
- android studio 导入 eclipse 并上传到svn
- 如何使用struts2搭建web项目
- Android图片加载框架:ImageLoader,Volley,Picasso,Glide,Fresco
- 数据包接收系列 — 下半部实现(软中断)
- 我的青春,我的梦
- WebView中常见问题总结
- 2015中国数据库大会Mongodb分享