2015-07-02 2 views
0

Я пытаюсь создать пользовательский адаптер для своего навигационного ящика и продолжать получать исключение nullpointer на разводке макета. Я попытался объявить переменную LayoutInflater внутри и вне метода getView, как это предлагается в других сообщениях, но безрезультатно.Исключение Nullpointer на Inflater в адаптере пользовательского ящика

Ниже мой заказ адаптер класса

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; 
} 

Вот где я называю это в моем MainActivity в 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) 

ответ

1

Эта строка this.mContext = mContext; должна быть mContext = context; в конструкторе DrawerListAdapter.

+0

Это само по себе не сделал это – Rafa

+0

попробовать https://developer.android.com/ tools/debugging/debugging-studio.html, чтобы увидеть, какая переменная имеет значение null. – Emma

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

Example of ListAdapter AbsView & PlaceHolder pattern