Fragment案例之:Fragment与其他组件间数据交互

需求:实现如图效果,当我点击左边item,并将对应内容显示到右边Fragment上,比如我点击了北京,那么就将对应的"北京"二字显示在右边Fragment上。

主要代码如下,需要特别注意的地方都会有特殊标示。

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"
tools:context=".MainActivity" >

<RelativeLayout
android:id="@+id/left_fragment"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="#0080FF" />

<RelativeLayout
android:id="@+id/right_fragment"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="3"
android:background="@android:color/darker_gray" />

</LinearLayout>

activity_left.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" >

<ListView
android:id="@id/android:list"   //需要注意的是这里的id的写法,当使用ListFragment时,对于的ListView的id设置为:id/android:list
android:layout_width="match_parent"
android:layout_height="match_parent" />

</LinearLayout>

MainActivity中主要代码:

public class MainActivity extends FragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Fragment leftFragment = new LeftFragment();

//用Fragment内容替换掉布局文件中左边部分
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.left_fragment, leftFragment).commit();

}
}

LeftFragment中主要代码:

public class LeftFragment extends ListFragment {

private View view;
List<String> mArrayList = new ArrayList<String>();
private ArrayAdapter<String> adapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.activity_left, null);
adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.test_list_item, android.R.id.text1, getData()); //前两个参数都是调用系统默认的测试参数
setListAdapter(adapter);  //调用setListAdapter()方法设置适配器,该方法是ListFragment中未实现的一个方法,所以可以直接调用
return view;
}

private List<String> getData() {
mArrayList.add("北京");
mArrayList.add("上海");
mArrayList.add("广州");
mArrayList.add("深圳");
mArrayList.add("成都");
mArrayList.add("重庆");
mArrayList.add("天津");

return mArrayList;

}

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// TODO Auto-generated method stub
super.onListItemClick(l, v, position, id);

//获取到点击了的item上的值
String item = adapter.getItem(position);

//将值存放在Bundle中
Bundle bundle = new Bundle();
bundle.putString("item", item);

RightFragment rightFragment = new RightFragment();
getActivity().getSupportFragmentManager().beginTransaction()
.replace(R.id.right_fragment, rightFragment).commit();
rightFragment.setArguments(bundle);
}
}

RightFragment中主要代码:

public class RightFragment extends Fragment {

@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}

@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
TextView tv = new TextView(getActivity());
// 取出左边Fragment存入的值并设置到TextView上展示出来
Bundle argument = getArguments();
tv.setText(argument.getString("item"));
return tv;
}
}

时间: 2024-12-29 01:17:52

Fragment案例之:Fragment与其他组件间数据交互的相关文章

Vue2.0组件间数据传递

Vue1.0组件间传递 使用$on()监听事件: 使用$emit()在它上面触发事件: 使用$dispatch()派发事件,事件沿着父链冒泡: 使用$broadcast()广播事件,事件向下传导给所有的后代 Vue2.0后$dispatch(),$broadcast()被弃用,见https://cn.vuejs.org/v2/guide/migration.html#dispatch-和-broadcast-替换 1,父组件向子组件传递场景:Father上一个输入框,根据输入传递到Child组件

angular1.5 组件学习 -- 2.2、组件间的交互:子向父

有父组件向子组件传递数据,那必然会有子组件向父组件返回数据.这时将使用事件绑定来调用父组件中的方法,告诉父组件:子组件有数据给你,接着. <!DOCTYPE html> <html lang="en" ng-app="myApp"> <head> <meta charset="UTF-8"> <title>子组件向父组件发送数据</title> <script src=

React和Vue组件间数据传递demo

一.React (一)父组件向子组件传数据 简单的向下传递参数 /* Parent */ class App extends Component { render() { return ( <div className="App"> <Child msg="来自父元素的问候"/> </div> ); } } /* Child */ class Child extends Component { render() { return

系统间数据交互的方案探讨

===================================== 互联网时代, 1等公民是建立规范和协议的人 2等公民是提供服务的人 3等公民是开发软件的人 4等公民是卖硬件的人 ===================================== 信息系统的普及应用导致原有系统间的信息孤岛需要通过系统间接口进行数据交互,信息交互的接口常见有以下几种: (1)数据库交互:服务方提供表或存储过程,由调用方控制commit或rollback. (2)文件交互:双方对请求文件各应答文件

系统间数据交互注意项

先了解点问题:◎ 是否担心数据丢失,比如丢失率 1%?◎ 系统时效性要求是否很高,比如是:实时.秒级.分钟级还是小时级?◎ 系统间网络环境是否OK,比如是:互联网.同机房.同城专线?◎ 系统间有无安全通讯信道等问题需要保障? 给点初步建议:◎ 不暴露数据库,否则:人家统计你等待.人家锁表你死机.人家改数你纠错:◎ 约松耦合越好,能批处理就不要实时处理,能用数据交换就不用接口调用,能用异步接口就不用同步接口:◎ 是不是WebService随意,不过现在有不少轻量级方案,主要还是看安全性和性能要求了

Vue2.0子同级组件之间数据交互

接着我们进入Demo,首先我们可以删除掉模板项目中src/components/Hello.vue,然后在App.vue中删除对于Hello子组件的注册和使用还有一些其他无关紧要的东西,此时的App.vue应为这样 一 .我们先来创建中央事件总线,在src/assets/下创建一个eventBus.js,内容如下(eventBus中我们只创建了一个新的Vue实例,以后它就承担起了组件之间通信的桥梁了,也就是中央事件总线.) 二 . 创建一个firstChild组件,引入eventBus这个事件总

组件之间数据交互

有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的 Vue 实例作为中央事件总线: var bus = new Vue() // 触发组件 A 中的事件 bus.$emit('id-selected', 1) // 在组件 B 创建的钩子中监听事件 bus.$on('id-selected', function (id) { // ... })   实例代码如下: <!DOCTYPE html> <html lang="en"> <head&g

activity通过onActivityResult间数据交互

首先要创建2个activity 分别为MainActivity和OneActiivity MainActivity代码如下: package com.tp.soft.app; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View

【Vue】浅谈Vue不同场景下组件间的数据交流

浅谈Vue不同场景下组件间的数据“交流” Vue的官方文档可以说是很详细了.在我看来,它和react等其他框架文档一样,讲述的方式的更多的是“方法论”,而不是“场景论”,这也就导致了:我们在阅读完文档许多遍后,写起代码还是不免感到有许多困惑,因为我们不知道其中一些知识点的运用场景.这就是我写这篇文章的目的,探讨不同场景下组件间的数据“交流”的Vue实现 父子组件间的数据交流 父子组件间的数据交流可分为两种: 1.父组件传递数据给子组件 2.子组件传递数据给父组件 父组件传递数据给子组件——pro