Android Fragment(三)ListFragment简单介绍以及Fragment之间通信
一、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之间通信相关推荐
- 从零开始开发Android相机app(三)简单介绍图像滤镜功能
目前章节 1.从零开始安卓端相机功能开发(一)了解用什么去开发以及流程 2.从零开始安卓端相机功能开发(二)让我们来开发一个相机 3.从零开始开发Android相机app(三)简单介绍图像滤镜功能 文 ...
- Android 项目工程目录简单介绍
**一..gradle文件夹.** android studio使用时自动生成的文件夹,开发者不用关心里面的内容,开发过程不会改这个文件夹内容,存放gradle构建脚本,可以理解为为 ...
- Android MediaPlayer使用方法简单介绍
1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPlayer ...
- Android TV机顶盒开发简单介绍
关于Andiroid 机顶盒开发,我简单的写一下,希望我的经验可以给各位带来一点经验.图片我就不上传的,很麻烦的! 首先是Android的apk如何安装到机顶盒上? 1. 将TV连接机顶盒,然后找到设 ...
- Android感应检测Sensor(简单介绍),Android系统面试题
Sensor 说明 Sensor.TYPE_ACCELEROMETER 加速度感应检测 Sensor.TYPE_MAGNETIC_FIELD 磁场感应检测 Sensor.TYPE_ORIENTATIO ...
- Android感应检测Sensor(简单介绍),Android架构师之路
实现以下两个SensorEventListener方法来监听,并取得感应检测Sensor状态: //在感应检测到Sensor的精密度有变化时被调用到. public void onAccuracyCh ...
- 对应猎豹网校的lua 视频教程 做的学习记录 前三课简单介绍1-3
假设有一个1.lua 位置在 c:\Users\Administrator\Documents\lua\1.luafunction fact(n)if n==0 thenreturn 1elseret ...
- ViewPager简单介绍(二)ViewPager+Fragment
实现ViewPager要适配器,一般的使用PagerAdapter,对于fragment,我们所使用的是FragmentPagerAdapter和FragmentPagerStateAdapter. ...
- Android Material Design 系列之 BottomNavigationView + ViewPager + Fragment + BadgeView 开发详解
前言 BottomNavigationView 是 Material Design 提供的一个标准底部导航栏的实现,可以轻松的实现导航栏菜单之间的切换与浏览.底部导航使用户更方便的查看和切换最高层级的 ...
最新文章
- connot not ensure the target project location exist and is accessible
- 算法--------字母异位词分组 (Java 版本)
- go语言使用redis —— redigo
- DL之DNN:利用MultiLayerNetExtend模型【6*100+ReLU+SGD,dropout】对Mnist数据集训练来抑制过拟合
- Windows 7 下IIS 7.5 结合Zend构建PHP集成开发环境
- php debug_print_backtrace,php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
- JAVA-date(计算时间差)
- chart控件删除最左边点_常见功能测试点的测试用例大全
- 简书3.3.1新出现的bug
- Mysql中的日期及时间相关函数
- 用程序去掉文件和文件夹的只读属性
- linux设置系统环境变量的天坑
- 利润最大化下的模型cutoff测算
- 硬核3-D视觉 - 三维视觉简介
- 快递鸟代收货款接口demo-order
- 学术论文如何撰写数据分析部分?
- 2018互联网大会,科幻大片照进现实!
- 浅谈征信大数据与撸贷
- html自动布局框架,html布局 百分比自适应框架网页模板
- DataStage_Stage使用