Nullpointer exception on Inflater in Custom Drawer Adapter

一曲冷凌霜 提交于 2019-12-12 02:14:35

问题


I'm trying to make a custom adapter for my navigation drawer, and keep getting a nullpointer exception on the layout inflater. I've tried declaring the LayoutInflater variable inside and outside the getView method as suggested in other posts, but to no avail.

Below is my Custom Adapter Class

Context mContext;
private ArrayList<String> mValues = new ArrayList<String>();
LayoutInflater inflater;

public DrawerListAdapter(Context context, ArrayList<String> mValues) {
    super(context, R.layout.drawer_layout, mValues);

    this.mContext = mContext;
    this.mValues = mValues;
    inflater = LayoutInflater.from(mContext);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View rowView = convertView;

    if(rowView == null){
        rowView = inflater.inflate(R.layout.drawer_layout, parent, false);
    } else{
        Log.d("DEBUG", "rowView is not null");
    }

    TextView textView = (TextView) rowView.findViewById(R.id.drawer_text);

    switch (position) {
        case 0:
            textView.setBackgroundColor(mContext.getResources().getColor(R.color.materialRed));
            textView.setText(mValues.get(position));
            break;
        case 1:
            textView.setBackgroundColor(mContext.getResources().getColor(R.color.materialLightBlue));
            textView.setText(mValues.get(position));
            break;
        case 2:
            textView.setBackgroundColor(mContext.getResources().getColor(R.color.materialLightGreen));
            textView.setText(mValues.get(position));
            break;
        case 3:
            textView.setBackgroundColor(mContext.getResources().getColor(R.color.materialLime));
            textView.setText(mValues.get(position));
            break;

    }

    return rowView;
}

Here is where I call it in my MainActivity within the onCreate() method

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    setContentView(R.layout.activity_main);

    mDrawerTitles.add("Politics");
    mDrawerTitles.add("Technology");
    mDrawerTitles.add("Sports");
    mDrawerTitles.add("Books");

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(android.R.id.list);

    DrawerListAdapter drawerAdapter = new DrawerListAdapter(this, mDrawerTitles);
    mDrawerList.setAdapter(drawerAdapter);

    //mDrawerList.setOnItemClickListener(new DrawerItemClickListener());
    new HttpJSONLoader().execute();

}

and my stack trace

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference
        at android.view.LayoutInflater.from(LayoutInflater.java:219)
        at net.rmoreno.lemonlime.DrawerListAdapter.<init>(DrawerListAdapter.java:26)
        at net.rmoreno.lemonlime.MainActivity.onCreate(MainActivity.java:49)
        at android.app.Activity.performCreate(Activity.java:5933)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)

           


回答1:


This line this.mContext = mContext; should be mContext = context; in DrawerListAdapter constructor.




回答2:


change that

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

    Context = parent.getContext()

    /** then check convertView & inflate view  & u can use placeHolder with setTag()*/
    rootView = LayoutInflater.from(context).inflate(R.layout....,parent,false);
    ....
    return rootView;
}

here u got example how to manage adapter and AbsView

Example of ListAdapter AbsView & PlaceHolder pattern



来源:https://stackoverflow.com/questions/31195541/nullpointer-exception-on-inflater-in-custom-drawer-adapter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!