1

У меня проблема с моим пользовательским массивом адаптером:Пользовательского ArrayAdapter NullPointerException

У меня есть NullpointerException в моем getView() методе.

Я уже выяснил, что ArrayList, похоже, не проблема, потому что он отлично работает без адаптера.

Мой адаптер

public class ArrayAdapterCusPostlist extends ArrayAdapter<Post> { 

    Context mContext; 
    ArrayList<Post> postListe; 


    public ArrayAdapterCusPostlist(Context mContext, int layoutResourceId, ArrayList<Post>pList) { 

     super(mContext, layoutResourceId, pList); 
     postListe = pList; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if(convertView==null){ 
      LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.rowpost, parent, false); 
     } 
     Post curpost=postListe.get(position); 

     if(curpost!=null){ 
     TextView textViewItem = (TextView) convertView.findViewById(R.id.nickname2); 
     textViewItem.setText(curpost.getName()); 
     textViewItem.setTag(curpost.getName()); 
     } 

     return convertView; 

    } 

} 

А: Если ArrayList пуст, потому что я не назвал add() метод не NullPointerException. Вот мой список массивов:

ArrayList<Post> PostList=new ArrayList<Post>(); 
    PostList.add(new Post("Name", "Zeit", "Post", getResources().getDrawable(R.drawable.winter), getResources().getDrawable(R.drawable.winter))); 
    mPostList = (ListView) findViewById(R.id.postliste); 
    final ArrayAdapterCusPostlist adapter2 = new ArrayAdapterCusPostlist(this, R.layout.rowpost, PostList); 
    mPostList.setAdapter(adapter2); 

Спасибо!

ответ

0

Context mContext; не инициализируется

Context mContext; 
LayoutInflater inflater; 
public ArrayAdapterCusPostlist(Context mContext, int layoutResourceId, ArrayList<Post>pList) { 
super(mContext, layoutResourceId, pList); 
this.mContext =mContext; 
inflater = LayoutInflater.from(context); // initialize here. no need for context initialization if you have this here. 
} 

Также лучше вы используете ViewHolder шаблон

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if(convertView==null){ 
     convertView = inflater.inflate(R.layout.rowpost, parent, false); 
     holder = new ViewHolder(); 
     holder.textViewItem = (TextView) convertView.findViewById(R.id.nickname2); 
     convertView.setTag(holder); 
    } 
    else 
    { 
      holder = (ViewHolder) convertView.getTag(); 
    } 
    Post curpost=postListe.get(position); 

    holder.textViewItem.setText(curpost.getName()); 
    holder.textViewItem.setTag(curpost.getName()); 
    } 

    return convertView; 

static class ViewHolder 
{ 
    TextView textViewItem; 
} 
} 
+0

Спасибо большое! Он отлично работает для меня. Спасибо! – doomii96

Смежные вопросы