2013-07-28 137 views
1

我有2个自定义列表视图,我用它来显示不同的类别。但是,当第二个列表视图被创建时,我从getView返回时得到这个NullPointerException。我无法弄清楚原因。getView nullPointerException自定义列表视图Android

下面是代码:

CustomListAdapter:

public class CustomListAdapter extends ArrayAdapter<String>{ 

    Context context; 
    String[] stringList; 
    TextView medium, small; 


    public CustomListAdapter (Context con, String[] sL) 
    { 
     super(con, R.layout.my_list, R.id.mediumTextInList, sL); 
     context = con; 

     stringList = sL; 


    } 

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



     LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View newRowView = inflator.inflate(R.layout.my_list, parent,false); 


     medium = (TextView) newRowView.findViewById(R.id.mediumTextInList); 
     small = (TextView) newRowView.findViewById(R.id.smallText); 

     medium.setText(stringList[position]); 

     return super.getView(position, newRowView, parent); 
    } 

}

ListActivity:

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 

     Bundle myBasket = new Bundle(); 

     myBasket.putString("name", categoryName); 

     Intent myIntent = new Intent(myFirstList.this, mySecondList.class); 

     myIntent.putExtras(myBasket); 
     startActivity(intent); 
} 

堆栈跟踪:

07-28 17:04:46.551: E/AndroidRuntime(2290): FATAL EXCEPTION: main 
07-28 17:04:46.551: E/AndroidRuntime(2290): java.lang.NullPointerException 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:355) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.ArrayAdapter.getView(ArrayAdapter.java:323) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at com.umer.androiduetproject.CustomListAdapterForDeptAndSemesters.getView(CustomListAdapterForDeptAndSemesters.java:53) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.AbsListView.obtainView(AbsListView.java:1430) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.ListView.makeAndAddView(ListView.java:1745) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.ListView.fillDown(ListView.java:670) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.ListView.fillFromTop(ListView.java:727) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.ListView.layoutChildren(ListView.java:1584) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.AbsListView.onLayout(AbsListView.java:1260) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.view.View.layout(View.java:7175) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.view.View.layout(View.java:7175) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.view.View.layout(View.java:7175) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1140) 
07-28 17:04:46.551: E/AndroidRuntime(2290):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859) 

问候

+1

调试您的CustomListAdapterForDeptAndSemesters类的第53行。 – robotoaster

回答

2

你不应该叫super.getView,只是返回newRowView。

+0

什么时候应该返回super.getView(),如果你想自己膨胀,我们什么时候该返回getView –

+1

不要叫超级。特别是如果你想为自定义叶子视图分配值 – robotoaster

0

stringList是否有空值?可以在super.getView()中调用方法toString()

0

您可以使用这种方式。

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

    ViewHolder holder; 
    View newRowView = convertView; 

    if (convertView == null) { 
     LayoutInflater inflator = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     newRowView = inflator.inflate(R.layout.my_list, parent,false); 
     holder = new ViewHolder(); 
     holder.medium = (TextView) newRowView.findViewById(R.id.mediumTextInList); 
     holder.small = (TextView) newRowView.findViewById(R.id.smallText); 

     newRowView .setTag(holder); 
     } 

    else { 

      holder = (ViewHolder) newRowView .getTag(); 
      } 

     holder.medium.setText(stringList[position]); 

     return newRowView ; 
    }