获取MainActivity对象的错误

jackiewan 2018-08-31 09:58:25
我在左侧leftFragment中定义了按钮的点击事件,在里面获取ManiActivity的实例(MainActivity mainActivity = (MainActivity) context;);我想把这个获取MainActivity的对象定义为类的成员变量,方便其他地方调用。但是当我定义为成员变量后,再次执行程序,就会报错,提示空指针异常。请问为什么会有这个错误,请大神指教。
下面是部分代码:
public class LeftFragment extends BaseFragment {
private List<NewsCenterPagerBean.DataBean> data;
private ListView mListView;
private MyLeftFragmentAdapter mAdapter;
private MainActivity mainActivity = (MainActivity) context;
/**
* 记录当前点击的位置
*/
private int prePosition = 0;

@Override
public View initView() {
mListView = (ListView) View.inflate(context,R.layout.leftfragment_menu,null);
//mListView.setPadding(0, DensityUtil.dip2px(context,40),0,0);
mListView.setDividerHeight(0);//取消每个单元之间的分割线
mListView.setCacheColorHint(Color.TRANSPARENT);//将mListView的点击背景颜色设为透明
mListView.setSelector(android.R.color.transparent);//将mListView的Item点击背景颜色设为透明
/**
* 设置item的点击事件
* 分三步:
* 1、记录点击的位置,背景变为红色
* 2、点击之后,把左侧菜单关闭(toggle方法,若是开则会关,关则开)
* 3、切换到对应的详情页面(新闻、专题、组图、互动、投票)
*/
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//1
prePosition = position ;
mAdapter.notifyDataSetChanged();
//2 疑问:为什么必须要在此处获取MainAcivity的实例,不能把他定义为成员变量?
// MainActivity mainActivity = (MainActivity) context;
mainActivity.getSlidingMenu().toggle();
//3
obtainNewsPagerInstance(prePosition);
}
});
return mListView;

}

错误提示:
java.lang.NullPointerException: Attempt to invoke virtual method 'com.jeremyfeinstein.slidingmenu.lib.SlidingMenu com.jeremyfeinstein.slidingmenu.lib.app.SlidingFragmentActivity.getSlidingMenu()' on a null object reference
at com.example.my_beijingnews.fragment.LeftFragment$1.onItemClick(LeftFragment.java:56)
...全文
399 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jackiewan 2018-08-31
  • 打赏
  • 举报
回复
非常感谢您的帮助 @dang当年情
怀君 2018-08-31
  • 打赏
  • 举报
回复
建议你去看下类的加载机制,当一个类进行初始化的时候,会先针对成员变量包括静态变量进行初始化。然而以你的写法,类初始化的过程中还不知道传进来的上下文是来自哪里,你这个时候进行初始化必然报错,我的理解是这样的
private MainActivity mainActivity

你可以这样定义,然后再initView()方法里面进行赋值
mainActivity = (MainActivity) context;

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧