【问题标题】:getView nullPointerException for custom List View Android自定义列表视图 Android 的 getView nullPointerException
【发布时间】:2013-07-28 12:28:14
【问题描述】:

我有 2 个自定义列表视图,用于显示不同的类别。但是,当创建第二个列表视图时,从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)

问候

【问题讨论】:

  • 调试 CustomListAdapterForDeptAndSemesters 类的第 53 行。

标签: java android listview custom-adapter


【解决方案1】:

你不应该调用 super.getView,只需要返回 newRowView。

【讨论】:

  • 什么时候应该返回 super.getView() 什么时候应该只返回 getView
  • 如果您想自己充气,请不要调用 super。特别是如果您想为自定义叶视图分配值
【解决方案2】:

你可以这样用。

@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 ;
    }

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-10-09
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多