2012-07-10 53 views
2

我有一个定制适配器用于我的ListView。它给我NullPointerExceptionsetAdapter。我经历了几次我的代码,无法弄清楚导致NPE的原因。以下是相关的代码片段:定制适配器不工作

活动:

ListView mListView; 
Vector<DashboardBean> dashboardBean= new Vector<DashboardBean>(); 
MyCustomAdapter adapter; 

adapter = new MyCustomAdapter(MyDashboardActivity.this, 
       R.layout.testdashboard_row, dashboardBean); 

     adapter.clear(); 

dashboardBean.add(new DashboardBean(projects, workRequests, status)); 
     mListView.setAdapter(adapter); 

Dashboardbean:

public class DashboardBean { 

    public String project; 
    public String workRequest; 
    public String startDate; 
    public String status; 
    public String actualHours; 
    public String actualMins; 


    public DashboardBean(String project, String workRequest,String status) 
    { 
     this.project = project; 
     this.workRequest = workRequest; 
     this.status = status; 
    } 

} 

CustomAdapter:

public class MyCustomAdapter extends ArrayAdapter<DashboardBean> { 


Context context; 
int layoutResourceId; 
DashboardBean currentMRB; 
Vector<DashboardBean> data; 

public MyCustomAdapter(Context context, int layoutResourceId, Vector<DashboardBean> data) 
{ 
    super(context,layoutResourceId,data); 
    this.layoutResourceId = layoutResourceId; 
    this.context=context; 
    this.data = data; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    MyStringReaderHolder holder; 


    if(row==null) 
    { 
     LayoutInflater inflater = ((Activity)context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent,false); 

     holder= new MyStringReaderHolder(); 


     holder.project = (TextView)row.findViewById(R.id.project); 
     holder.workRequest = (TextView)row.findViewById(R.id.work_request); 
     holder.status = (TextView) row.findViewById(R.id.status); 


     row.setTag(holder); 
    } 
    else 
    { 
     holder=(MyStringReaderHolder) row.getTag(); 
    } 

    DashboardBean mrb = data.elementAt(position); 

    holder.project.setText(mrb.project); 
    holder.workRequest.setText(mrb.workRequest); 
    holder.status.setText(mrb.status); 

    return row; 
} 

static class MyStringReaderHolder 
{ 
TextView project, workRequest, startDate, status, actualHours; 

} 
} 

谁能帮助?

回答

3

在你的“活动”片段,你从来没有一个值赋给mListView

ListView mListView; //initialize me please :) 

正因为如此,它是空的,并且总是抛出NullPointerException。也许你有一些用xml定义的东西,并且你想要调用findViewById(int)

mListView = (ListView) findViewById(R.id.theListViewId); 
+0

嗯,它被初始化了。但是,对于错误的ID。非常感谢你指出:) – Harsh 2012-07-10 21:06:18