自定义pager类成员变量位置初始化数据无效&ArrayList给ListView添加数据时报空指针异常
2016-12-13 liuyingcong 安卓开发
看代码:
以下是自定义的pager基类,用于给ViewPager控件添加子页面
/** * @创建时间 2016年7月12日 下午1:21:36 * @描述 主界面四个pager页面的基类 */ public class BasePager implements View.OnClickListener{ protected Activity mContext; protected View mRoot; protected FrameLayout mBaseContent; /** * 构造器,创建时传入主界面activity * @param context 主界面activity */ public BasePager(Activity context) { this.mContext = context; initView(); initData(); initEvent(); } /** * 用于展示界面的方法 */ public void initView() { mRoot = View.inflate(mContext, R.layout.main_basepager, null); mBaseContent = (FrameLayout) mRoot.findViewById(R.id.basepager_framelayout); } /** * 用于加载数据的方法 */ public void initData() { } /** * 用于添加事件的方法 */ public void initEvent() { } /** * 用于改变页面的方法 * @param position 改变到哪一个页面 */ public void switchPage(int position) { } /** * 获取界面布局对象的方法 * @return 页面布局对象 */ public View getRoot() { return mRoot; } @Override public void onClick(View v) { } }
以下是某个具体页面,继承了BasePager
public class CoursePager extends BasePager {
private ListView mListView;//上部列表
private List mCategoryList = null;//课程分类列表
public CoursePager(Activity context) {
super(context);
}
@Override
public void initView() {
super.initView();
View coursePager = View.inflate(mContext, R.layout.pager_course, null);
mListView=((ListView) coursePager.findViewById(R.id.lv_course_pager_list));
mBaseContent.addView(coursePager);
}
@Override
public void initData() {
mCategoryList = new ArrayList<>();
load();
}
@Override
public void initEvent() {
MyLVAdapter mAdapter = new MyLVAdapter();
mListView.setAdapter(mAdapter);
}
/**
* 获取课程分类列表,即上部显示几块
*/
private void load() {
mCategoryList.add("育灵童国学");
mCategoryList.add("国学课堂");
mCategoryList.add("中小学教材同步");
}
/**
* 上部列表的适配器
*/
public class MyLVAdapter extends BaseAdapter {
@Override
public int getCount() {
return mCategoryList.size();
}
@Override
public Object getItem(int position) {
return mCategoryList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(mContext, R.layout.item_course_pager_list, null);
return convertView;
}
}
问题1:在CoursePager中成员变量位置初始化 mCategory即List 变量无效,报空指针异常,即未初始化;
解 决:必须在initView()或initData()方法中初始化, 在构造器方法中初始化都无效。
问题2:MyLVAdapter中方法getCount()返回mCategory.size()会报空指针异常; 声明、初始化、赋值都做了,还报这样的错误,用一个数组代替它则不报错
解 决:初始化MyLVAdapter时将mCategory作为参数传进去;
或者有条件用异步加载,当数据加载成功后用adapter.notifyDataSetChanged()。