博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Fragment(三)ListFragment简单介绍以及Fragment之间通信
阅读量:5809 次
发布时间:2019-06-18

本文共 8696 字,大约阅读时间需要 28 分钟。

一、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[]{            "贾克斯",            "无双剑姬",            "蕾欧娜",            "安妮",            "潘森",            "盖伦"    };*/        @Override    public void onAttach(Activity activity) {        super.onAttach(activity);        try{            callback = (LeftFragmentCallback)activity;        }catch(Exception e){                    }    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        return inflater.inflate(R.layout.listfragmentleft_layout, container, false);    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setListAdapter(new ArrayAdapter
(getActivity(), android.R.layout.simple_list_item_1,TestData.getInstance().getData(-1))); } @Override public 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); }}

与之对应的布局文件:

二、点击左边菜单时弹出的右边菜单类(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[]{            "天启者",            "赵信",            "嘉文四世",            "稻草人",            "瑞文",            "船长",            "盲僧"    };*/    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container,            Bundle savedInstanceState) {        return inflater.inflate(R.layout.listfragment_right, container, false);    }    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setListAdapter(new ArrayAdapter
(getActivity(), android.R.layout.simple_list_item_1,TestData.getInstance().getData(1))); } @Override public 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(); */ }}

与之对应的布局文件:

三、以上两者之间的通信桥梁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;    @Override    protected 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();        }    }    @Override    public 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
(MyFragmentActivity.this, android.R.layout.simple_list_item_1,TestData.getInstance().getData((position+1)))); }else{ } }catch(Exception e){ } } @Override public void onClick(View v) { switch(v.getId()){ case R.id.listfragment_btn: if(window!=null && !window.isShowing()){ show(btn); } break; } } }

与之对应的布局:

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

package com.yw.myapiupdate.fragment;import java.util.ArrayList;import java.util.List;public class TestData {    private List
listParent = new ArrayList
(); private List
listA = new ArrayList
(); private List
listB = new ArrayList
(); private List
listC = new ArrayList
(); private List
listD = new ArrayList
(); 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
getData(int target){// List
lists = new ArrayList
(); 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以及他们之间的通信到此就结束了,你?弄明白了吗?

转载于:https://www.cnblogs.com/tony-yang-flutter/p/3391822.html

你可能感兴趣的文章
dubbo源码分析-架构
查看>>
Windows phone 8 学习笔记
查看>>
我的友情链接
查看>>
LeetCode--112--路径总和
查看>>
感悟贴2016-05-13
查看>>
百度编辑器ueditor 光标位置的坐标
查看>>
DEV-C++ 调试方法简明图文教程(转)
查看>>
参加婚礼
查看>>
Java重写equals方法和hashCode方法
查看>>
Spark API编程动手实战-07-join操作深入实战
查看>>
Spring ’14 Wave Update: Installing Dynamics CRM on Tablets for Windows 8.1
查看>>
MySQL 备份与恢复
查看>>
TEST
查看>>
PAT A1037
查看>>
(六)Oracle学习笔记—— 约束
查看>>
[Oracle]如何在Oracle中设置Event
查看>>
top.location.href和localtion.href有什么不同
查看>>
02-创建hibernate工程
查看>>
Scrum之 Sprint计划会议
查看>>
svn命令在linux下的使用
查看>>