背景:fragmentation(单ACTIVITY+多个fragments)+brvah(  recyclerView多级自定义菜单功能)

目的:实现  菜单栏的点击,fragment 显示相应的内容

============================================

mainActivity.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <android.support.v4.widget.DrawerLayout
  3. android:id="@+id/drawer_layout"
  4. xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:app="http://schemas.android.com/apk/res-auto"
  6. xmlns:tools="http://schemas.android.com/tools"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. android:fitsSystemWindows="true"
  10. tools:openDrawer="start">
  11.  
  12. <FrameLayout
  13. android:id="@+id/fl_container"
  14. android:layout_width="match_parent"
  15. android:layout_height="match_parent"
  16. tools:context=".demo_flow.MainActivity">
  17. </FrameLayout>
  18.  
  19. <RelativeLayout
  20. android:id="@+id/menu_layout_left"
  21. android:layout_width="match_parent"
  22. android:layout_height="match_parent"
  23. android:layout_gravity="left"
  24. android:background="@drawable/menu_bg"
  25. android:layout_marginRight="10dp"
  26. android:layout_marginTop="57dp" >
  27.  
  28. <android.support.v7.widget.RecyclerView
  29. android:id="@+id/rv"
  30. android:layout_width="match_parent"
  31. android:layout_height="match_parent"
  32. />
  33. </RelativeLayout>
  34.  
  35. </android.support.v4.widget.DrawerLayout>

遇到的问题:

1、因为菜单点击显示 fragment

  在菜单的adapter 中要实现对fragment的 控制,

我的实现方式:           回调函数

(1)菜单的adapter中的部分代码:

  1. private SubClickListener subClickListener;
  2.  
  3. public void setsubClickListener(SubClickListener topicClickListener) {
  4. this.subClickListener = topicClickListener;
  5. }

  6. //接口,希望在mainActivity中实现
  7. public interface SubClickListener {
  8. void OntopicClickListener(View v, int position);
  9. }
  1. protected void convert(final BaseViewHolder holder, final MultiItemEntity item) {
  1. switch (holder.getItemViewType()) {
  2. case TYPE_LEVEL_0:
  3. holder.setImageResource(R.id.iv_head, R.mipmap.head_img1);
  4. final Level0Item lv0 = (Level0Item) item;
  5. int subTitle = Integer.parseInt(lv0.subTitle.split("_")[0]);
  6. int itemID = Integer.parseInt(lv0.subTitle.split("_")[1]);
  7. switch (subTitle)
  8. {
  9. case 1:
  10. holder.setImageResource(R.id.iv_head,R.mipmap.head_img0);
  11. break;
  12. case 2:
  13. holder.setImageResource(R.id.iv_head,R.mipmap.head_img1);
  14. break;
  15. case 3:
  16. holder.setImageResource(R.id.iv_head,R.mipmap.head_img2);
  17. break;
  18. case 4:
  19. holder.setImageResource(R.id.iv_head,R.mipmap.head_img2);
  20. break;
  21. case 5:
  22. holder.setImageResource(R.id.iv_head,R.mipmap.head_img2);
  23. break;
  24.  
  25. }
  26. //if(subTitle=="1") System.out.println("---------------------level--------------------");
  27. //System.out.println("---------------------level-int-------------------");
  28. String name = lv0.title;
  29. if(name.indexOf(".doc")>0)
  30. {
  31. holder.setTypeface(R.id.title, Typeface.SANS_SERIF);
  32. holder.setImageResource(R.id.iv_head,R.mipmap.head_img_1);
  33. }
  34. holder.setText(R.id.title, lv0.title)
  35. .setText(R.id.sub_title, lv0.subTitle)
  36. .setImageResource(R.id.iv, lv0.isExpanded() ? R.mipmap.arrow_b : R.mipmap.arrow_r);
  37. holder.itemView.setOnClickListener(new View.OnClickListener() {
  38. @Override
  39. public void onClick(View v) {
  40. int pos = holder.getAdapterPosition();
  41. if (subClickListener != null) {
  42. subClickListener.OntopicClickListener(v,pos);
  43. }
  44. if (lv0.isExpanded()) {
  45. collapse(pos);
  46. } else {
  47. expand(pos);
  48. }
  49. }
  50. });
  51. break;
  52.  //此处省略其他分支……
  53. }
  54. }

  (2)mainActivity.java

  结构如下:

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. setContentView(R.layout.activity_main);
  5.  
  6. MySupportFragment fragment = findFragment(HomeFragment.class);
  7. if (fragment == null) {
  8. loadRootFragment(R.id.fl_container, HomeFragment.newInstance());
  9. }
  10. initView();
  11. }
  1. final ISupportFragment topFragment = getTopFragment();
  1. private void initView() {
  2. mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
  3. ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
  4. this, mDrawer, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
  5. // mDrawer.setDrawerListener(toggle);
  6. toggle.syncState();
  7.  
  8. //added by ssqhan
  9. mRecyclerView = (RecyclerView)findViewById(R.id.rv);
  10. list=generateData();
  11. adapter=new ExpandableItemAdapter(list);
  12. adapter.setsubClickListener(new ExpandableItemAdapter.SubClickListener() {
  13. @Override
  14. public void OntopicClickListener(View v, int position) { //实现菜单中adapter回调函数
  15. TextView tv=(TextView)v.findViewById(R.id.title);
  16. final String wbs_name = (String) tv.getText();
  17. boolean flag = (tv.getText().toString().indexOf(".doc")>0);
  18. if(flag)
  19. {
  20. mDrawer.closeDrawer(GravityCompat.START);
  21. mDrawer.postDelayed(new Runnable() {
  22. @Override
  23. public void run() {
  24. SartFragment(wbs_name);
  25. }
  26. }, 300);
  27. }
  28. }
  29. });
  30. //adapter.get
  31. manager = new LinearLayoutManager(this);
  32.  
  33. mRecyclerView.setAdapter(adapter);
  34. //important! setLayoutManager should be called after setAdapter
  35. mRecyclerView.setLayoutManager(manager);
  36. adapter.expandAll();
  37. }
  1. public void SartFragment(String tableName)
  2. {
  3. HomeFragment fragment=null;
  4. DiscoverFragment discoverFragment0=null;
  5. Bundle newBundle = new Bundle();
  6. System.out.println("---------------discovery---------------");
  7.  
  8. switch (tableName) {
  9. case "避雷器实验报告.doc":
  10. fragment = findFragment(HomeFragment.class);
  11. newBundle.putString("from", "From:" + topFragment.getClass().getSimpleName());
  12. fragment.putNewBundle(newBundle);
  13. start(fragment, SupportFragment.SINGLETASK);
  14. break;
  15. case "电缆头施工记录.doc":
  16. discoverFragment0 = findFragment(DiscoverFragment.class);
  17. if (discoverFragment0 == null) {
  18. popTo(HomeFragment.class, false, new Runnable() {
  19. @Override
  20. public void run() {
  21. start(DiscoverFragment.newInstance());
  22. Bundle myBundle = new Bundle();
  23. DiscoverFragment discoverFragment=null;
  24. if(topFragment==null) {
                       //这个地方,发现 topFragment 是空一直都是空
  25. System.out.println("---------------------------------------");
  26. System.out.println("----------topFragment is null----------");
  27. System.out.println("---------------------------------------");
                       
  28. //loadRootFragment(R.id.fl_container, HomeFragment.newInstance());
  29.  
  30. }
  31. myBundle.putString("from", "From:" + topFragment.getClass().getSimpleName());
  32. discoverFragment.putNewBundle(myBundle);
  33. start(discoverFragment, SupportFragment.SINGLETASK);
  34. }
  35. });
  36.  
  37. }
  38. else
  39. {
  40. newBundle.putString("from", "From:" + topFragment.getClass().getSimpleName());
  41. discoverFragment0.putNewBundle(newBundle);
  42. start(discoverFragment0, SupportFragment.SINGLETASK);
  43. }
  44. break;
  45. }
  46. }

问题:如何解决,这个一直为空???

android :fragmentation使用中遇到的 NullPointerException的更多相关文章

  1. android studio使用中遇到的问题

    旧版和新版切换会报错(点击更正, 不影响程序使用) 2.debug正常, 打包签名程序时候报错 String index out of range: -82 java.lang.StringIndex ...

  2. Android Studio使用中的异常

    Android studio教程:[4]真机测试 1.连不上手机 Android Studio识别不了手机(最后还是恢复成勾中的状态),重启,Android Studio连接真机没反应? 2.连上手机 ...

  3. android studio使用中碰到Failure [INSTALL_FAILED_OLDER_SDK] 问题

    第一次使用Android studio开发.直接新建一个默认项目运行出现:Failure [INSTALL_FAILED_OLDER_SDK] , 网上很多人说修改build.gradle中的mins ...

  4. Android Studio使用中的小常识

    1.如何继承抽象类? 1.1新建一个类如下: public class PersonDBOpenHelper{ } 1.2手写extends 你继承的类名 public class PersonDBO ...

  5. Android使用butterknife注解出现nullPointerException解决

    1.下载butterknife加入到你的libs中,构建到你的项目中,此时还不能注解成功,必须进行2配置 2.选择你的项目右键---->properties----->java compi ...

  6. android中的屏幕单位介绍

    1.px (pixels)(像素):是屏幕的物理像素点,与密度相关,密度大了,单位面积上的px 会比较多.通常不推荐使用这个. 2.dip 或dp(与密度无关的像素):一个基于density(密度)的 ...

  7. Android Fragment 实例

    Fragment是Android honeycomb 3.0新增的概念,在Android——Fragment介绍.Android Fragment使用.Android FragmentManage F ...

  8. android View 关于transient

    今天来研究一下 ListView 的删除动画 由于 ListView 卷动时会把画面上的 item 重用以显示不同数据 这样会导致我们可能会删除到非正确的 item 或是出现显示上的问题(该 item ...

  9. android 屏幕适配基础(1)

    1. 概念定义 寸/英寸:   1寸=3.333333厘米:1英寸=2.54厘米(屏幕尺寸以英寸为单位) 像素 :    像素是组成图象的最基本单元要素:点. 一个像素有多大呢?主要取决于显示器的分辨 ...

随机推荐

  1. LMV实验

    在CentOS6.8上创建过程如下: #对需要创建lvm的卷进行磁盘分区[root@www ~13:40:48]#fdisk /dev/sde Device contains neither a va ...

  2. Advanced R之数据结构

    看了几本R语言语法相关的书籍,感觉都不怎么好,在实际使用过程中仍然遇到很多难以理解的问题,后来看了Hadley Wickham的Advanced R,好多问题迎刃而解,今天重温了该书的第一章即数据结构 ...

  3. C#窗体上绘制矩形

    先上效果图 鼠标三个事件 private void Form1_MouseDown(object sender, MouseEventArgs e) { //记录开始点 this.mousedown ...

  4. Apache日志解读

    想要知道什么人在什么时候浏览了网站的哪些内容吗?查看Apache的访问日志就可以知道.访问日志是Apache的标准日志,本文详细解释了访问日志的内容以及相关选项的配置. 一.访问日志的格式  Apac ...

  5. WPF学习系列之四(WPF事件5大类)

    WPF最重要的5类事件: 生命周期事件:这些事件将在元素被初始化,加载或卸载时发生. 鼠标事件 这些事件是鼠标动作的结果. 键盘事件 这些事件是键盘动作的结果. 手写笔事件 这些事件是作用类似铅笔的手 ...

  6. c# sleep 例子-线程挂起

    using System; using System.Threading; public class arr { public static void Main() { //int[] arr; // ...

  7. Android在Win10环境搭建

    一.安装JDK并配置环境变量 1.在Java官方网站上下载相应系统的jdk文件安装,如win7 64 位系统下安装jdk-6u45-windows-x64,全部选择默认的安装路径即可安装完成. 2.配 ...

  8. 当Python中混进一只薛定谔的猫……

    本文原创并首发于公众号[Python猫],未经授权,请勿转载. 原文地址:https://mp.weixin.qq.com/s/-fFVTgWVsydFsNu1nyxUzA Python 是一门强大的 ...

  9. window.onerror 捕捉所有的前端error

    //[捕捉所有前端error] window.onerror = function (errormessage, url, line, column, error) { console.log(&qu ...

  10. 51nod1113(矩阵快速幂模板)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1113 题意:中文题诶- 思路:矩阵快速幂模板 代码: #inc ...