Android Fragment之间传值
首先来介绍的是我们的默认的布局
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="horizontal" >
- <fragment
- android:id="@+id/fragment1"
- android:name="com.example.chuang.frgone"
- android:layout_width="0dp"
- android:layout_weight="1"
- android:layout_height="match_parent" />
- <fragment
- android:id="@+id/fragment2"
- android:name="com.example.chuang.frgtwo"
- android:layout_weight="1"
- android:layout_width="0dp"
- android:layout_height="match_parent" />
- </LinearLayout>
需要注意的属性也就fragment中的那个name属性,这个属性很关键,作用就是在这个布局被加载时,fragment自动实例化对应的类
既然要加载两个类文件,所以就必须加载对应的布局,
fragment_one 的布局文件:
- <?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" >
- <ListView
- android:id="@+id/ls_show"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" >
- </ListView>
- </LinearLayout>
fragment_two 的布局文件:
- <?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" >
- <TextView
- android:id="@+id/tv_show"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="TextView" />
- </LinearLayout>
然后我们需要做的就是将布局文件和类进行绑定
- package com.example.chuang;
- import android.app.Fragment;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- public class frgtwo extends Fragment {
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- // TODO Auto-generated method stub
- return inflater.inflate(R.layout.fragment_two, container);
- }
- }
其他的绑定也是类似的,运行的效果如下图,在这里为你看清楚,我在Fragment_one中添加了背景颜色,
为了方便测试,我们定义了如下的字段
- package com.example.chuang;
- import java.util.ArrayList;
- import android.app.Fragment;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- public class frgone extends Fragment {
- private ListView ls=null;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View v=inflater.inflate(R.layout.fragment_one, container);
- ls=(ListView)v.findViewById(R.id.ls_show);
- ls.setAdapter(new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,GetArray()));
- return v;
- }
- private ArrayList<String> GetArray()
- {
- ArrayList<String> al=new ArrayList<String>();
- al.add("我就是我");
- al.add("点亮我的新");
- al.add("你的心,我的鑫");
- return al;
- }
- }
效果图如下
那现在我们要做的呢就是在左边点击,右边显示,也就是实现Fragment之间的传值
第一种方法,也就是利用回调
- package com.example.chuang;
- import java.util.ArrayList;
- import android.app.Activity;
- import android.app.Fragment;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- public class frgone extends Fragment {
- private CallBack back=null;
- private ListView ls=null;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View v=inflater.inflate(R.layout.fragment_one, container);
- ls=(ListView)v.findViewById(R.id.ls_show);
- ls.setAdapter(new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,GetArray()));
- ls.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- if(back!=null)
- {
- back.SetTeee(String.valueOf( parent.getItemAtPosition(position)));
- //back.SetTeee(getString(getId()));
- }
- }
- });
- return v;
- }
- private ArrayList<String> GetArray()
- {
- ArrayList<String> al=new ArrayList<String>();
- al.add("我就是我");
- al.add("点亮我的新");
- al.add("你的心,我的鑫");
- return al;
- }
- public interface CallBack
- {
- void SetTeee(String s);
- }
- @Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
- if(activity instanceof CallBack)
- {
- back=(CallBack)activity;
- }
- }
- }
然后是主Activity的代码
- @Override
- public void SetTeee(String s) {
- View v= this.findViewById(R.id.fragment2);
- TextView t=(TextView)v.findViewById(R.id.tv_show);
- t.setText(s);
- }
效果图如下,这样我们就实现了第一种方法
第二种方法
使用第二种方法,我们首先需要来了解一下Fragment 和Activity的生命周期
我们可以根据上面的那个图,可以知道,只有当fragment创建完毕,活动就会通知他们调用onActivityCreated()方法,来告知
所以我们就可以在这里获取到主活动里面的一切,不是想干嘛就干嘛吗0-0!
贴上代码
- package com.example.chuang;
- import java.util.ArrayList;
- import android.app.Activity;
- import android.app.Fragment;
- import android.os.Bundle;
- import android.view.LayoutInflater;
- import android.view.View;
- import android.view.ViewGroup;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.ArrayAdapter;
- import android.widget.ListView;
- import android.widget.TextView;
- public class frgone extends Fragment {
- private CallBack back=null;
- private ListView ls=null;
- private TextView tv=null;
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View v=inflater.inflate(R.layout.fragment_one, container);
- ls=(ListView)v.findViewById(R.id.ls_show);
- ls.setAdapter(new ArrayAdapter(getActivity(),android.R.layout.simple_list_item_1,GetArray()));
- ls.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- if(back!=null)
- {
- if(tv!=null)
- tv.setText(String.valueOf( parent.getItemAtPosition(position)));
- }
- }
- });
- return v;
- }
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- View v= getActivity().findViewById(R.id.fragment2);
- tv=((TextView)v.findViewById(R.id.tv_show));
- }
- private ArrayList<String> GetArray()
- {
- ArrayList<String> al=new ArrayList<String>();
- al.add("我就是我");
- al.add("点亮我的新");
- al.add("你的心,我的鑫");
- return al;
- }
第三种方法,那就是在Activity中来管理两个Fragment,当然做法也是非常的简单,只需要在Activity的start生命周期后就可以
Android Fragment之间传值的更多相关文章
- [转][译][Android基础]Android Fragment之间的通信
2014-2-14 本篇文章翻译自Android官方的培训教程,我也是初学者,觉得官方的Training才是最好的学习材料,所以边学边翻译,有翻译不好的地方,请大家指正. 如果我们在开发过程中为了重用 ...
- Android Fragment之间的通信(用fragment替换掉XML布局文件中的一个线性布局)
1.XML布局 (1)主界面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xml ...
- Android Fragment之间传递List数据
要说的是在两个Fragment之间传递List数据,比如有个List<User>,以及传递字符串数据,比如testId,该如何从FragmentA传递到FragmentB呢? 下面这个例子 ...
- Android - fragment之间数据传递
<Fragment跳转时传递参数及结果回传的方法> <Fragment详解之五——Fragment间参数传递> <Android解惑 - 为什么要用Fragment.se ...
- Android fragment之间消息传递
1. 在Fragment里定义一个内部接口, 在Fragment初始化方法里, 把父Activity转换成这个接口, 赋值给成员变量 public class DummyFragment extend ...
- Fragment之间传值
Activity: String myArguments; public String getarguments() { return myArguments; } public void ...
- Android activity之间传值关键性代码
从当前activity中获取et 表单中的值,并跳转到myactivity.java所绑定的xml布局文件上. private EditText et; Intent intent=new Inten ...
- android fragment传递参数_fragment之间传值的两种方法
在Activity中加载Fragment的时候.有时候要使用多个Fragment切换.并传值到另外一个Fragment.也就是说两个Fragment之间进行参数的传递.查了很多资料.找到两种方法.一种 ...
- Android——软键盘操作+fragment之间传递参数+TextView限制字数,显示"..."
原文地址: Android 手动显示和隐藏软键盘 Android隐藏输入法键盘(hideSoftInputFromInputMethod没有效果) Android Fragment传递参数_Fragm ...
随机推荐
- "Money, Money, Money"
acdream1408:http://115.28.76.232/problem?pid=1408 题意:给你一个x,让你构造a,b,是的na+bm可以组成大于x的所有的数.a>1,b>1 ...
- public void Delete(List EntityList) where T : class, new()类型参数约束
查找后发现这是类型参数约束,.NET支持的类型参数约束有以下五种: where T : struct | T必须是一个结构类型 where T : class T必须是一个类(class)类型 whe ...
- 一些简单的问题. 2的10次方与k (涉及到b k m的要用乘来解读)
2的10次方是k k就表示2的10次方 2的16次方,解读为 2的6次方(64)*2的10次方(k) 简写为64k 64k=64*k 同理2的20次方 解读为2的10次方*2的10次方 k ...
- ANDROID_MARS学习笔记_S01原始版_023_MP3PLAYER004_同步显示歌词
一.流程分析 1.点击播放按钮,会根据lrc名调用LrcProcessor的process()分析歌词文件,得到时间队列和歌词队列 2.new一个hander,把时间队列和歌词队列传给自定义的线程类U ...
- VC++下封装ADO类以及使用方法
操作系统:windows 7软件环境:visual studio 2008 .Microsoft SQL 2005本次目的:介绍一个已经封装的ADO类,简单说明怎么导入使用 首先声明一下,这个封装的A ...
- 163. Missing Ranges
题目: Given a sorted integer array where the range of elements are [lower, upper] inclusive, return it ...
- Ember.js demo1
<!DOCTYPE html> <html> <head> <script src="http://code.jquery.com/jquery-1 ...
- Android 内核初识(7)RefBase、LightRefBase、sp和wp
简介 RefBase是Android中所有对象的始祖,类似MFC中的CObject及Java中的Object对象.在Android中,RefBase结合sp和wp,实现了一套通过引用计数的方法来控制对 ...
- tlplayer for ios V1.1(附上截图)
此程序UI修改于虎跃在线课堂.所以极其相似. 可以播放网络视频与本地视频,不知道怎么拷贝本地视频到Ipad或iphone上看的朋友,请自己到网上看教程. 支持mms,file,rtsp,rtmp,ht ...
- Form – 保存自動關閉當前窗口
FAQ: 在BUTTON的触发器中,写如下代码, commit_form; go_bloack('你想显示的那个window的block'); --或者写 show_view('你要显示的canvas ...