我正在尝试为我的导航抽屉创建一个自定义适配器,并继续在布局inflater上获得nullpointer异常。我已尝试按照其他帖子中的建议在LayoutInflater
方法内外声明getView
变量,但无济于事。
以下是我的自定义适配器类
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;
}
以下是我在onCreate()
方法
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();
}
和我的堆栈跟踪
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)
答案 0 :(得分:1)
这一行this.mContext = mContext;
应该是DrawerListAdapter构造函数中的mContext = context;
。
答案 1 :(得分:0)
改变
@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;
}
这里有一个例子来管理适配器和AbsView