一、Fragment通信简单介绍:Fragments之间是不能够直接通信的,他们之间的通信是通过Activity这个中间件来通信的, 为了让Fragment跟它的Activity通信,我们可以在Fragment类中定义一个接口,并在它所属的Activity中实现该接口。Fragment在它的onAttach()方法执行期间捕获该接口的实现,然后就可以调用接口方法,以便跟Activity通信。

二、需求:利用ListFragment实现一个浮动的二级菜单,点击左边菜单在右边显示与之对应的二级菜单列表。效果如下图所示:

废话不多说了,直接给大家上代码:

一、ListFragmentLeft(左边的ListFragment菜单)

package com.yw.myapiupdate.fragment;import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;import com.yw.myapiupdate.R;@SuppressLint("NewApi")
public class ListFragmentLeft extends ListFragment{private LeftFragmentCallback callback;
/*    String[] lists = new String[]{"贾克斯","无双剑姬","蕾欧娜","安妮","潘森","盖伦"};*/@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);try{callback = (LeftFragmentCallback)activity;}catch(Exception e){}}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return inflater.inflate(R.layout.listfragmentleft_layout, container, false);}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,TestData.getInstance().getData(-1)));}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {callback.leftCallback(position);/*Toast.makeText(getActivity(),      "You have selected:\t " + lists[position],      Toast.LENGTH_SHORT).show();   */  }/*** 回调接口* @author yw-tony**/public interface LeftFragmentCallback{public void leftCallback(int position);}
}

与之对应的布局文件:

<?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:background="#33ff00"android:orientation="vertical" ><ListView android:id="@id/android:list"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:drawSelectorOnTop="false"/></LinearLayout>

二、点击左边菜单时弹出的右边菜单类(ListFragmentRight)

package com.yw.myapiupdate.fragment;import com.yw.myapiupdate.R;import android.annotation.SuppressLint;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;@SuppressLint("NewApi")
public class ListFragmentRight extends ListFragment{
/*    String[] listRight = new String[]{"天启者","赵信","嘉文四世","稻草人","瑞文","船长","盲僧"};*/@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {return inflater.inflate(R.layout.listfragment_right, container, false);}@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,TestData.getInstance().getData(1)));}@Overridepublic void onListItemClick(ListView l, View v, int position, long id) {((MyFragmentActivity)getActivity()).windowDiss();/*Toast.makeText(getActivity(),      "You have selected:\t " + listRight[position],      Toast.LENGTH_SHORT).show(); */    }
}

与之对应的布局文件:

<?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:background="#ff66ff"android:orientation="vertical" ><ListView android:id="@id/android:list"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_weight="1"android:drawSelectorOnTop="false"/></LinearLayout>

三、以上两者之间的通信桥梁Activity(MyFragmentActivity)

package com.yw.myapiupdate.fragment;import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.FragmentManager;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.WindowManager;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.PopupWindow;import com.yw.myapiupdate.R;
import com.yw.myapiupdate.fragment.ListFragmentLeft.LeftFragmentCallback;@SuppressLint("NewApi")
public class MyFragmentActivity extends Activity implements
LeftFragmentCallback,OnClickListener{
/*    String[] lists = new String[]{"天启者","赵信","嘉文四世","稻草人","瑞文","船长","盲僧","那身男爵"};*/private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);TestData.getInstance().setData();setContentView(R.layout.listfragment_layout);btn = (Button)findViewById(R.id.listfragment_btn);btn.setOnClickListener(this);/*Display display = getWindowManager().getDefaultDisplay();if(display.getWidth() > display.getHeight()){FragmentRed red = new FragmentRed();getFragmentManager().beginTransaction().replace(R.id.fragment_linear_layout, red).commit();}else{FragmentYellow yellow = new FragmentYellow();getFragmentManager().beginTransaction().replace(R.id.fragment_linear_layout, yellow).commit();}*/initMenu();}private LayoutInflater inflater;private View view;private PopupWindow window;private void initMenu(){inflater = LayoutInflater.from(this);view = inflater.inflate(R.layout.popupwindow_layout, null);window = new PopupWindow(view,WindowManager.LayoutParams.FILL_PARENT,WindowManager.LayoutParams.FILL_PARENT);window.setWidth(WindowManager.LayoutParams.FILL_PARENT);window.setHeight(WindowManager.LayoutParams.FILL_PARENT);window.setFocusable(true);window.setOutsideTouchable(true);window.setBackgroundDrawable(new BitmapDrawable());}/*** 显示窗体* @param anchor*/public void show(View anchor){if(window!=null && !window.isShowing()){window.showAsDropDown(anchor);}}/*** 关闭窗体*/public void windowDiss(){if(window!=null && window.isShowing()){window.dismiss();}}@Overridepublic void leftCallback(int position) {try{/*ListFragmentRight listRight = (ListFragmentRight)getFragmentManager.findFragmentById(R.id.listfragment_right);*/FragmentManager manager = getFragmentManager();ListFragmentRight listRight = (ListFragmentRight) manager.findFragmentById(R.id.listfragment_right);if(listRight != null){listRight.setListAdapter(new ArrayAdapter<String>(MyFragmentActivity.this,android.R.layout.simple_list_item_1,TestData.getInstance().getData((position+1))));}else{}}catch(Exception e){}}@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.listfragment_btn:if(window!=null && !window.isShowing()){show(btn);}break;}}}

与之对应的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/fragment_linear_layout"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" android:baselineAligned="false">
</LinearLayout>

四、提供静态数据源的工具类

package com.yw.myapiupdate.fragment;import java.util.ArrayList;
import java.util.List;public class TestData {private List<String> listParent = new ArrayList<String>();private List<String> listA = new ArrayList<String>();private List<String> listB = new ArrayList<String>();private List<String> listC = new ArrayList<String>();private List<String> listD = new ArrayList<String>();private TestData(){}private static TestData instance;public static TestData getInstance(){if(instance == null){synchronized (TestData.class) {if(instance == null){instance = new TestData();}}}return instance;}/*** 获取数据* @param target* @return*/public List<String> getData(int target){
//        List<String> lists = new ArrayList<String>();switch(target){case 1:return listA;
//            break;case 2:return listB;
//            break;case 3:return listC;
//            break;case 4:return listD;
//            break;
        }return listParent;}public void setData(){listParent.add("A");listParent.add("B");listParent.add("C");listParent.add("D");listA.add("A1");listA.add("A2");listA.add("A3");listB.add("B1");listB.add("B2");listB.add("B3");listB.add("B4");listC.add("C1");listC.add("C2");listD.add("D1");listD.add("D2");listD.add("D3");listD.add("D4");listD.add("D5");}}

程序运行后的效果图:

好了,ListFragment以及他们之间的通信到此就结束了,你?弄明白了吗?

Android Fragment(三)ListFragment简单介绍以及Fragment之间通信相关推荐

  1. 从零开始开发Android相机app(三)简单介绍图像滤镜功能

    目前章节 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机app(三)简单介绍图像滤镜功能 文 ...

  2. Android 项目工程目录简单介绍

    **一..gradle文件夹.** ​        android studio使用时自动生成的文件夹,开发者不用关心里面的内容,开发过程不会改这个文件夹内容,存放gradle构建脚本,可以理解为为 ...

  3. Android MediaPlayer使用方法简单介绍

    1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPlayer ...

  4. Android TV机顶盒开发简单介绍

    关于Andiroid 机顶盒开发,我简单的写一下,希望我的经验可以给各位带来一点经验.图片我就不上传的,很麻烦的! 首先是Android的apk如何安装到机顶盒上? 1. 将TV连接机顶盒,然后找到设 ...

  5. Android感应检测Sensor(简单介绍),Android系统面试题

    Sensor 说明 Sensor.TYPE_ACCELEROMETER 加速度感应检测 Sensor.TYPE_MAGNETIC_FIELD 磁场感应检测 Sensor.TYPE_ORIENTATIO ...

  6. Android感应检测Sensor(简单介绍),Android架构师之路

    实现以下两个SensorEventListener方法来监听,并取得感应检测Sensor状态: //在感应检测到Sensor的精密度有变化时被调用到. public void onAccuracyCh ...

  7. 对应猎豹网校的lua 视频教程 做的学习记录 前三课简单介绍1-3

    假设有一个1.lua 位置在 c:\Users\Administrator\Documents\lua\1.luafunction fact(n)if n==0 thenreturn 1elseret ...

  8. ViewPager简单介绍(二)ViewPager+Fragment

    实现ViewPager要适配器,一般的使用PagerAdapter,对于fragment,我们所使用的是FragmentPagerAdapter和FragmentPagerStateAdapter. ...

  9. Android Material Design 系列之 BottomNavigationView + ViewPager + Fragment + BadgeView 开发详解

    前言 BottomNavigationView 是 Material Design 提供的一个标准底部导航栏的实现,可以轻松的实现导航栏菜单之间的切换与浏览.底部导航使用户更方便的查看和切换最高层级的 ...

最新文章

  1. connot not ensure the target project location exist and is accessible
  2. 算法--------字母异位词分组 (Java 版本)
  3. go语言使用redis —— redigo
  4. DL之DNN:利用MultiLayerNetExtend模型【6*100+ReLU+SGD,dropout】对Mnist数据集训练来抑制过拟合
  5. Windows 7 下IIS 7.5 结合Zend构建PHP集成开发环境
  6. php debug_print_backtrace,php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
  7. JAVA-date(计算时间差)
  8. chart控件删除最左边点_常见功能测试点的测试用例大全
  9. 简书3.3.1新出现的bug
  10. Mysql中的日期及时间相关函数
  11. 用程序去掉文件和文件夹的只读属性
  12. linux设置系统环境变量的天坑
  13. 利润最大化下的模型cutoff测算
  14. 硬核3-D视觉 - 三维视觉简介
  15. 快递鸟代收货款接口demo-order
  16. 学术论文如何撰写数据分析部分?
  17. 2018互联网大会,科幻大片照进现实!
  18. 浅谈征信大数据与撸贷
  19. html自动布局框架,html布局 百分比自适应框架网页模板
  20. DataStage_Stage使用

热门文章

  1. 深入理解 Go Modules 的 go.mod 与 go.sum
  2. win10 wifi连接上却显示无法连接internet
  3. 煽情的儿子557=随笔
  4. 驱动直流电机三相全控桥整流电路
  5. Windows7虚拟机无法安装 VMware Tools简单解决方法
  6. 关于微博三方登录的授权机制
  7. 教你新手如何才能更好的学平面设计
  8. 终结代购跨境直购新选择
  9. 余额宝转出到银行卡要手续费吗「解答」
  10. java实现每天定时执行任务,Java之——实现每天定时执行任务