【问题标题】:ListView throws NullPointerExceptionListView 抛出 NullPointerException
【发布时间】:2014-06-05 08:51:19
【问题描述】:

我在活动布局上有一个自定义 ListView(Bauerca 的 DragSortListView),当我启动活动时,它会抛出 NullPointerException 并关闭应用程序,但是当我下次启动此活动时 - 它工作正常。我怎样才能消除这个错误。 日志

06-05 14:47:13.218: E/AndroidRuntime(498): FATAL EXCEPTION: main
06-05 14:47:13.218: E/AndroidRuntime(498): java.lang.NullPointerException
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.view.ViewGroup.addView(ViewGroup.java:1821)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.view.ViewGroup.addView(ViewGroup.java:1808)
06-05 14:47:13.218: E/AndroidRuntime(498):  at com.mobeta.android.dslv.DragSortListView$AdapterWrapper.getView(DragSortListView.java:739)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.AbsListView.obtainView(AbsListView.java:1430)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.ListView.makeAndAddView(ListView.java:1745)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.ListView.fillDown(ListView.java:670)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.ListView.fillFromTop(ListView.java:727)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.ListView.layoutChildren(ListView.java:1584)
06-05 14:47:13.218: E/AndroidRuntime(498):  at com.mobeta.android.dslv.DragSortListView.layoutChildren(DragSortListView.java:2136)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.AbsListView.onLayout(AbsListView.java:1260)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.view.View.layout(View.java:7175)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.RelativeLayout.onLayout(RelativeLayout.java:912)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.view.View.layout(View.java:7175)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.view.View.layout(View.java:7175)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.widget.FrameLayout.onLayout(FrameLayout.java:338)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.view.View.layout(View.java:7175)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.view.ViewRoot.performTraversals(ViewRoot.java:1140)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1859)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.os.Looper.loop(Looper.java:123)
06-05 14:47:13.218: E/AndroidRuntime(498):  at android.app.ActivityThread.main(ActivityThread.java:3683)
06-05 14:47:13.218: E/AndroidRuntime(498):  at java.lang.reflect.Method.invokeNative(Native Method)
06-05 14:47:13.218: E/AndroidRuntime(498):  at java.lang.reflect.Method.invoke(Method.java:507)
06-05 14:47:13.218: E/AndroidRuntime(498):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-05 14:47:13.218: E/AndroidRuntime(498):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-05 14:47:13.218: E/AndroidRuntime(498):  at dalvik.system.NativeStart.main(Native Method)

适配器

private class OrderAdapter extends ArrayAdapter<Order>{
          public OrderAdapter(List<Order> list) {
              super(MainActivity.this, R.layout.order_list_item,R.id.address,list);
          }
          public View getView(int position, View convertView, ViewGroup parent) {
                  View v = super.getView(position, convertView, parent);
                        TextView item=(TextView) v.findViewById(R.id.address);
                          TextView subitem=(TextView) v.findViewById(R.id.client);
                          item.setTextColor(Color.WHITE);
                          subitem.setTextColor(Color.WHITE);
                          item.setText(getItem(position).order_address);
                          subitem.setText(getItem(position).order_client);

                          TextView pos = (TextView) v.findViewById(R.id.pos_number);
                          pos.setText(String.valueOf(getItem(position).position_number));

                          ImageView state = (ImageView) v.findViewById(R.id.checkItem);
                          state.setVisibility(View.VISIBLE);
                          if (getItem(position).order_status == 3)
                              state.setBackgroundResource(drawable.check_cancelled);
                          if (getItem(position).order_status == 2)
                              state.setBackgroundResource(drawable.check_checked);
                          if (getItem(position).order_status == 0)
                              state.setBackgroundResource(drawable.check_nb);
                          if (getItem(position).order_status == 1)
                          {
                              state.setVisibility(View.GONE);
                          }
                  return v;

正在初始化

c_orders = new ArrayList<Order>();
adapter = new OrderAdapter(c_orders);
myList=(DragSortListView)findViewById(R.id.dsvlist);
myList.setAdapter(adapter);
myList.setDropListener(onDrop);
myList.setRemoveListener(onRemove);
myList.setOnItemClickListener(listener);

【问题讨论】:

  • 发布你的代码
  • 为了什么?用于初始化列表视图或什么?
  • 是的,你在哪里设置适配器的代码?并初始化它

标签: java android android-layout listview nullpointerexception


【解决方案1】:

而不是调用

View v = super.getView(position, convertView, parent);

自行放大视图。

LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view v = inflater.inflate(R.layout.your_layout_name, parent, false);
.
.
.
.
.

注意:您应该阅读教程以了解“适配器的工作原理?”和“提高列表视图性能的最佳方法是什么?”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-11
    • 2013-09-07
    • 2013-06-18
    • 2016-07-07
    • 2014-10-02
    • 2012-05-21
    • 2014-08-15
    相关资源
    最近更新 更多