Java 自定义列表视图的getView nullPointerException
我有两个自定义列表视图,用于显示不同的类别。但是,当创建第二个列表视图时,当从Java 自定义列表视图的getView nullPointerException,java,android,listview,custom-adapter,Java,Android,Listview,Custom Adapter,我有两个自定义列表视图,用于显示不同的类别。但是,当创建第二个列表视图时,当从getView返回时,我会得到这个NullPointerException。我想不出原因 代码如下: CustomListAdapter: public class CustomListAdapter extends ArrayAdapter<String>{ Context context; String[] stringList; TextView medium, small;
getView
返回时,我会得到这个NullPointerException
。我想不出原因
代码如下:
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);
}
@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)
StackTrace:
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);
}
@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)
关于您不应该调用super.getView,只需返回newRowView。字符串列表中是否有空值?方法
toString()
可以在super.getView()
中调用,您可以使用这种方法
@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 ;
}
调试CustomListAdapterForDept和Semesters类的第53行。我们应该何时返回super.getView(),何时只返回getView如果您想自己充气,请不要调用super。尤其是要为自定义叶视图指定值时