android :fragmentation使用中遇到的 NullPointerException
2024-10-21 03:05:29
背景: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;
}
}
问题:如何解决,这个一直为空???
最新文章
- 从贝叶斯到粒子滤波——Round 1
- Python: 利用Python进行数据分析 学习记录
- Shaders(读书笔记4 --- Real-Time rendering)
- Silverlight无法启动调试,错误“Unable to start debugging. The Silverlight Developer Runtime is not installed. Please install a matching version.” 解决办法
- CSS3轻松实现清新 Loading 效果
- hdu 3054 Fibonacci 找循环节的公式题
- ubuntu 14.10 安装 zabbix
- CF Two Substrings
- [转载]JVM性能调优--JVM参数配置
- DLL入门浅析(2)——如何使用DLL
- 开源OSS.Social项目进阶介绍和使用展示
- EditTable-V1.0--续集
- 用Netty开发中间件:网络编程基础
- Android中JNI编程详解
- IP通信实验感想
- 关于css,js放置位置的问题
- 51nod--1265 四点共面 (计算几何基础, 点积, 叉积)
- 远程连接Linux
- 【c++】内存检查工具Valgrind介绍,安装及使用以及内存泄漏的常见原因
- Android计时器和倒计时
热门文章
- POJ3259(ford判环)
- RHEL&;nbsp;6&;nbsp;搭建ftp服务&;nbsp;xinetd,telnet
- [转]C/C++获取当前系统时间
- Gym 101142C CodeCoder vs TopForces (搜索)
- Photoshop CC 智能切图功能介绍
- POJ - 2955 Brackets括号匹配(区间dp)
- C++11之lambda表达式解析
- Python绘制正态分布曲线
- poj1144 tarjan求割点
- 2014-10-22 NOIP模拟赛