功能介绍:通过一个activity下方的三个按钮,分别是发送消息(sendButton)、聊天记录(chatButton)、常用语(commonButton)。当单击按钮是,来切换上方的fragment,用以显示不同的内容。

所用的知识点:当单击发送消息按钮时:

1.从MainActivity中把EditText中的值传到fragment中。

2.fragment如何动态的显示在MainActivity中。

针对第一个问题:在sendButton单击事件中:

private OnClickListener sendListener = new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

//获取fragment1中的text控件,可以在MainActivity中直接获取fragment中的控件

TextView showView=(TextView)findViewById(R.id.showtextviewId);

//得到EditText中的内容

String message = editText.getText().toString();

//getIntent().putExtra("str", message);

//String temp = getIntent().getStringExtra("str");

str = str.append(message).append("\n");

String text=null;

if(str.length()>100){

text = str.substring(str.length()-100, str.length()-1).toString();

}else {

text = str.toString();

}

//将获取的值放置到intent中,方便以后再fragment中获取

getIntent().putExtra("chatStr", str.toString());

showView.setText(text);

}

};

针对第二个问题:

//申明FragmentManager对象,和FragmentTransaction

private FragmentManager manager;

private FragmentTransaction transaction;

//获取两个对象的方法

manager = getSupportFragmentManager();

transaction = manager.beginTransaction();

//必须先初始化一个fragment,防止获取不到对应fragment中控件

//将要加载到MainActivity中fragment实例化对象

fragment_sendContent f1 = new fragment_sendContent();

//第一个参数是main_activity.xml中的FrameLayout的对象

transaction.add(R.id.frameLayout_content, f1);

//加入到后台栈中

transaction.addToBackStack(null);

//事务必须提交

transaction.commit();

当单击聊天记录按钮时:现象:获取到前面所有发送的内容。

所用到的知识点:

1.如何获取MainActivity中的数据(刚才发送的数据放在MainActivity中的数组中)

2.从一个fragment切换到另一个fragment中。

针对第一个问题:

先看在sendListener事件中:

//将获取的值放置到intent中,方便以后再fragment中获取

getIntent().putExtra("chatStr", str.toString());

在历史记录的fragment.java中:

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// TODO Auto-generated method stub

//加载对应的fragment,这里是history_record

View contentView = inflater.inflate(R.layout.history_record, null);

contentView.setBackgroundColor(Color.MAGENTA);

//获取这个fragment中的控件的方法

textView = (TextView) contentView.findViewById(R.id.recordTextViewId);

//获取MainActivity中的数据

String chatString = getActivity().getIntent().getStringExtra("chatStr");

textView.setText(chatString);

return contentView;

}

针对第二个问题:

fragment的动态切换:

private OnClickListener chatListener = new OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

fragment_HistoryRecord historyRecord = new fragment_HistoryRecord();

transaction = manager.beginTransaction();

transaction.replace(R.id.frameLayout_content, historyRecord);

transaction.addToBackStack(null);

transaction.commit();

}

};

当单击常用语按钮时:现象:弹出经常使用的用语(实现最麻烦)。

所用到的知识点:

1.利用ListView控件显示常用语

2.如何将数据放置到ListView中

3.熟悉SimpleAdapter、Map<K,V>,ArrayList<E>之间的配合使用

4.从一个fragment切换到另一个fragment中。(不赘述)

针对第一个问题:

新建一个xml文件,里面加上一个ListView即可。

<ListView

android:id="@+id/commonLanguageId"

android:layout_width="match_parent"

android:layout_height="200dp">

</ListView>

针对第二个问题:

//三个全局变量

private ListView listView;

private String[] strs;

private EditText editText;

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

View contentView = inflater.inflate(R.layout.fragment_listview, null);

//获取fragment中的控件对象

listView = (ListView) contentView.findViewById(R.id.commonLanguageId);

//第一个参数:

//第二个参数:是一个List<E>参数

//第三个参数:另一个布局文件,其中用一个textView控件来显示每一条listview中信息

//第四个参数:

//第五个参数:

SimpleAdapter simpleAdapter = new SimpleAdapter(getActivity().getApplicationContext(),

getData(), R.layout.show_item, new String[]{"common"}, new int[]{R.id.item});

listView.setAdapter(simpleAdapter);

return contentView;

}

//将申明的几个常用语加入到ArrayList中,使用键值对

public ArrayList<HashMap<String, String>> getData(){

ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String,String>>();

strs = new String[]{

"小孩","小姐","小东王","江西","你好!"

};

for(int i=0;i<strs.length;i++){

HashMap<String, String> map = new HashMap<>();

map.put("common", strs[i]);

list.add(map);

}

return list;

}

//当单击每一条item是触发的事件

public class listener{

public OnItemClickListener itemListener = new OnItemClickListener() {

@Override

//第三个参数表示的是给item在listView的位置

public void onItemClick(AdapterView<?> arg0, View arg1, int position,

long arg3) {

// TODO Auto-generated method stub

//获取MainActivity中的控件对象

editText = (EditText) getActivity().findViewById(R.id.editTextId);

String string  = strs[position];

editText.setText(string);

}

};

//上面的单击事件只能发生在onResume()中,不能放在onCreatView()中

@Override

public void onResume() {

// TODO Auto-generated method stub

super.onResume();

listView.setOnItemClickListener(new listener().itemListener);

}

Android中fragment之间和Activity的传值、切换的更多相关文章

  1. Android中Fragment与Activity之间的交互(两种实现方式)

    (未给Fragment的布局设置BackGound) 之前关于Android中Fragment的概念以及创建方式,我专门写了一篇博文<Android中Fragment的两种创建方式>,就如 ...

  2. Android中Fragment和ViewPager那点事儿(仿微信APP)

    在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...

  3. 深入分析:Android中app之间的交互(二,使用ComponentName)

    在前一篇相关主题的博文中我们了解了如何使用Action来启动当前应用之外的Activity处理我们的业务逻辑,在本篇笔记中我在简单介绍一下使用ComponentName来与当前应用之外的应用进行交互. ...

  4. Android 中Fragment使用

    Android 中Fragment使用 public class MainActivity extends Activity { public static String[] array = { &q ...

  5. Android中退出多个Activity的两个经典方法

    这里介绍两种方法:一种把每个activity记住,然后逐一干掉:另一种思路是使用广播. 方法一.用list保存activity实例,然后逐一干掉 上代码: import java.util.Linke ...

  6. Android中的this、Activity、Context等

    Android中的this.Activity.Context.Application等虽然有相似之处,但是不能乱用,每一个都有自己的特点.用的时候不能太随意了. 避免context相关的内存泄露,注意 ...

  7. 【Android】安卓开发之activity如何传值到fragment,activity与fragment传值

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家知道,我们利用activity使 ...

  8. android中使用Intent在activity之间传递数据

    android中intent传递数据的简单使用: 1.使用intent传递数据: 首先将需要传递的数据放入到intent中 Intent intent = new Intent(MainActivit ...

  9. Android中Fragment的两种创建方式

    fragment是Activity中用户界面的一个行为或者是一部分.你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用.你可以认 ...

随机推荐

  1. JS在严格模式和非严格模式的区别

    若想在严格模式下使用JS,需要在文件的第一行加上“use strict”,在实际开发中,常常将“use strict”加入到闭包的内部 具体是: 整个脚本中使用:在这个JavaScript文件开头写' ...

  2. poj1733(带权并查集+离散化)

    题目链接:http://poj.org/problem?id=1733 题意:给定由0.1组成的数串长度n,询问次数m,每次询问给出a,b,s,表示区间[a,b]内1的数量为s(odd-奇数或even ...

  3. pta l2-4(这是二叉搜索树吗?)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192 题意:给定n以及n个整数,问该序列 ...

  4. TOJ 2130: Permutation Recovery(思维+vector的使用)

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2130 时间限制(普通/Java): ...

  5. 18. 4Sum (通用算法 nSum)

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  6. RocketMq --consumer自动实现负载均衡

    这边使用一个producer和两个consumer是实现负载均衡. 看一下代码示例 package com.alibaba.rocketmq.example.message.model; import ...

  7. java 线程Thread 技术--线程状态与同步问题

    线程技术第三篇: 线程的状态: 1. 创建状态: 当用new 操作符创建一个新的线程对象时,该线程就处于创建状态,系统不为它分配资源 2.可运行状态:当线程调用start 方法将为线程分配必须的系统资 ...

  8. Swift 错误记录

    最近几天开始学习Swift,作为一个从 OC 转到 Swift 的程序员,我一直以为很简单.但是现在学习一个星期之后,发现问题还是蛮多的! 最大的问题就是 太特么 不习惯了!!!!!!!!!! 好吧, ...

  9. php中时间转换函数

    date("Y-m-d H:i",$unixtime)  1.php中获得今天零点的时间戳 要获得零点的unix时间戳,可以使用 $todaytime=strtotime(“tod ...

  10. [z]一步步教你如何在 Visual Studio 2013 上使用 Github

    [z]http://www.admin10000.com/document/4004.html 介绍 我承认越是能将事情变简单的工具我越会更多地使用它.尽管我已经知道了足够的命令来使用Github,但 ...