我正在尝试使用此tutorial为Android创建一个幻灯片菜单,然后我想出了这个错误,说我有空指针。以下是相应的类和logcat输出NavDrawerListAdapter class,NavdrawerItem和logcat。到目前为止,我已经尝试发现什么使它为null并仔细检查教程,但我无法找出任何线索。我会感谢任何帮助,谢谢。
答案 0 :(得分:3)
在适配器的getView()
方法中,行:
if(context == null)
应该是:
if(convertView == null)
答案 1 :(得分:1)
在完成代码和logcat之后......似乎你在 NavDrawerListAdapter类的 getView()方法中犯了错误。
在getView中你有以下错误
if(context == null){.... 您的上下文不能为null,因为在创建适配器时,您正在传递上下文,因此 convertView 不会因为您的 R.layout.drawer_list_item 而膨胀...因此当您尝试时 convertView.findViewById() 您将获得NullPointerException。
所以解决方案是使用 if(convertView == null) 而不是 if(context == null)
答案 2 :(得分:0)
请尝试这种方式,希望这有助于您解决问题。
public class NavDrawerListAdapter extends BaseAdapter{
private Context context;
private ArrayList<NavDrawerItem> navDrawerItems;
public NavDrawerListAdapter(Context context, ArrayList<NavDrawerItem> navDrawerItems){
this.context = context;
this.navDrawerItems = navDrawerItems;
}
@Override
public int getCount(){
return navDrawerItems.size();
}
@Override
public Object getItem(int position){
return navDrawerItems.get(position);
}
@Override
public long getItemId(int position){
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
ViewHolder holder;
if(convertView == null){
holder =new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.drawer_list_item, null);
holder.imgIcon = (ImageView)convertView.findViewById(R.id.icon);
holder.textTitle = (TextView)convertView.findViewById(R.id.title);
convertView.setTag(holder);
}else{
holder = (ViewHolder)convertView.getTag();
}
holder.textTitle.setText(navDrawerItems.get(position).getTitle());
return convertView;
}
static class ViewHolder{
ImageView imgIcon;
TextView textTitle;
}
}