自定义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()。


网站备案号:京ICP备11043289号-1 北京市公安局网络备案 海1101084571
版权所有 北京育灵童科技发展有限公司 Copyright © 2002-2018 www.elight.cn, All Rights Reserved