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

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

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

mainActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:openDrawer="start"> <FrameLayout
android:id="@+id/fl_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".demo_flow.MainActivity">
</FrameLayout> <RelativeLayout
android:id="@+id/menu_layout_left"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="@drawable/menu_bg"
android:layout_marginRight="10dp"
android:layout_marginTop="57dp" > <android.support.v7.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout> </android.support.v4.widget.DrawerLayout>

遇到的问题:

1、因为菜单点击显示 fragment

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

我的实现方式:           回调函数

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

private SubClickListener subClickListener;

public void setsubClickListener(SubClickListener topicClickListener) {
this.subClickListener = topicClickListener;
}

//接口,希望在mainActivity中实现
public interface SubClickListener {
void OntopicClickListener(View v, int position);
}
protected void convert(final BaseViewHolder holder, final MultiItemEntity item) {
switch (holder.getItemViewType()) {
case TYPE_LEVEL_0:
holder.setImageResource(R.id.iv_head, R.mipmap.head_img1);
final Level0Item lv0 = (Level0Item) item;
int subTitle = Integer.parseInt(lv0.subTitle.split("_")[0]);
int itemID = Integer.parseInt(lv0.subTitle.split("_")[1]);
switch (subTitle)
{
case 1:
holder.setImageResource(R.id.iv_head,R.mipmap.head_img0);
break;
case 2:
holder.setImageResource(R.id.iv_head,R.mipmap.head_img1);
break;
case 3:
holder.setImageResource(R.id.iv_head,R.mipmap.head_img2);
break;
case 4:
holder.setImageResource(R.id.iv_head,R.mipmap.head_img2);
break;
case 5:
holder.setImageResource(R.id.iv_head,R.mipmap.head_img2);
break; }
//if(subTitle=="1") System.out.println("---------------------level--------------------");
//System.out.println("---------------------level-int-------------------");
String name = lv0.title;
if(name.indexOf(".doc")>0)
{
holder.setTypeface(R.id.title, Typeface.SANS_SERIF);
holder.setImageResource(R.id.iv_head,R.mipmap.head_img_1);
}
holder.setText(R.id.title, lv0.title)
.setText(R.id.sub_title, lv0.subTitle)
.setImageResource(R.id.iv, lv0.isExpanded() ? R.mipmap.arrow_b : R.mipmap.arrow_r);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int pos = holder.getAdapterPosition();
if (subClickListener != null) {
subClickListener.OntopicClickListener(v,pos);
}
if (lv0.isExpanded()) {
collapse(pos);
} else {
expand(pos);
}
}
});
break;
 //此处省略其他分支……
}
}

  (2)mainActivity.java

  结构如下:

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); MySupportFragment fragment = findFragment(HomeFragment.class);
if (fragment == null) {
loadRootFragment(R.id.fl_container, HomeFragment.newInstance());
}
initView();
}
final ISupportFragment topFragment = getTopFragment();
private void initView() {
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, mDrawer, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
// mDrawer.setDrawerListener(toggle);
toggle.syncState(); //added by ssqhan
mRecyclerView = (RecyclerView)findViewById(R.id.rv);
list=generateData();
adapter=new ExpandableItemAdapter(list);
adapter.setsubClickListener(new ExpandableItemAdapter.SubClickListener() {
@Override
public void OntopicClickListener(View v, int position) { //实现菜单中adapter回调函数
TextView tv=(TextView)v.findViewById(R.id.title);
final String wbs_name = (String) tv.getText();
boolean flag = (tv.getText().toString().indexOf(".doc")>0);
if(flag)
{
mDrawer.closeDrawer(GravityCompat.START);
mDrawer.postDelayed(new Runnable() {
@Override
public void run() {
SartFragment(wbs_name);
}
}, 300);
}
}
});
//adapter.get
manager = new LinearLayoutManager(this); mRecyclerView.setAdapter(adapter);
//important! setLayoutManager should be called after setAdapter
mRecyclerView.setLayoutManager(manager);
adapter.expandAll();
}
public void SartFragment(String tableName)
{
HomeFragment fragment=null;
DiscoverFragment discoverFragment0=null;
Bundle newBundle = new Bundle();
System.out.println("---------------discovery---------------"); switch (tableName) {
case "避雷器实验报告.doc":
fragment = findFragment(HomeFragment.class);
newBundle.putString("from", "From:" + topFragment.getClass().getSimpleName());
fragment.putNewBundle(newBundle);
start(fragment, SupportFragment.SINGLETASK);
break;
case "电缆头施工记录.doc":
discoverFragment0 = findFragment(DiscoverFragment.class);
if (discoverFragment0 == null) {
popTo(HomeFragment.class, false, new Runnable() {
@Override
public void run() {
start(DiscoverFragment.newInstance());
Bundle myBundle = new Bundle();
DiscoverFragment discoverFragment=null;
if(topFragment==null) {
                   //这个地方,发现 topFragment 是空一直都是空
System.out.println("---------------------------------------");
System.out.println("----------topFragment is null----------");
System.out.println("---------------------------------------"
);
                   
//loadRootFragment(R.id.fl_container, HomeFragment.newInstance());
}
myBundle.putString("from", "From:" + topFragment.getClass().getSimpleName());
discoverFragment.putNewBundle(myBundle);
start(discoverFragment, SupportFragment.SINGLETASK);
}
}); }
else
{
newBundle.putString("from", "From:" + topFragment.getClass().getSimpleName());
discoverFragment0.putNewBundle(newBundle);
start(discoverFragment0, SupportFragment.SINGLETASK);
}
break;
}
}

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

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. MySQL 的索引和最左前缀原则

    这两天看<构建高性能Web站点>这本书,感觉写的真是不错,很多实际项目中会碰到的问题都有所提及,今天看到一个最左前缀原则,以前也听说过,不过一直没搞明白,今天查了下. 通过实例理解单列索引 ...

  2. gin-swagger包Api文档生成, Post请求参数无法接收, 问题修复。

    Bug描述 FormData方式下,任意参数类型都只生成file参数类型. 问题重现 问题代码在这一行 github.com\swaggo\swag\operation.go : 131 line c ...

  3. string实现

    #include<iostream> using namespace std;   class String{     friend ostream& operator<&l ...

  4. WSAStartup()函数的使用

    int WSAStartup( __in WORD wVersionRequested, __out LPWSADATA lpWSAData ); WSAStartup 格  式: int PASCA ...

  5. 洛谷P3382 【模板】三分法(三分找凹凸点)

    P3382 [模板]三分法 题目描述 如题,给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减.试求出x的值. 输入输出格式 输入格式: 第一行一次包含一个 ...

  6. DIV垂直水平居中

    方法一:使用定位的方法 .parent { width: 300px; height: 200px; border: 1px solid red; position:relative; } .chil ...

  7. 模板 - 动态规划 - 数位dp

    #include<bits/stdc++.h> using namespace std; #define ll long long ]; ll dp[][/*可能需要的状态2*/];//不 ...

  8. yii2之使用ueditor

    代码效果: 1.去github下载yii2高级版ueditor扩展 2.将下载的扩展放入  /common/widgets 中(目录如图所示) 3.在视图中的代码 <?=common\widge ...

  9. SAS批量导出sas7bdata至excel

    /*创建输出excel的宏*/ %macro export(inlib,intbl,outpath,outfile); proc export data=&inlib..&intbl ...

  10. Java Servlet图片上传至指定文件夹并显示图片

    在学习Servlet过程中,针对图片上传做了一个Demo,实现的功能是:在a页面上传图片,点击提交后,将图片保存到服务器指定路径(D:/image):跳转到b页面,b页面读取展示绝对路径(D:/ima ...