分配抽屉列表适配器时为空指针

时间:2014-08-30 05:14:20

标签: android android-fragments android-sliding

我正在尝试使用此tutorial为Android创建一个幻灯片菜单,然后我想出了这个错误,说我有空指针。以下是相应的类和logcat输出NavDrawerListAdapter classNavdrawerItemlogcat。到目前为止,我已经尝试发现什么使它为null并仔细检查教程,但我无法找出任何线索。我会感谢任何帮助,谢谢。

3 个答案:

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