2017-09-09 72 views
0

我正在使用自定义适配器来显示列表视图,但不幸的是,当我滚动它显示空对象引用。列表视图滚动自定义适配器上显示错误

我看了以前的问题,但没有任何工作anysuggestions?

截图:

[此处输入图像的描述] [1]

09-09 13:39:53.949 3111-3111/com.aug22.avinashchintareddy.ecommerce E/AndroidRuntime:致命异常:主要是 进程:com.aug22.avinashchintareddy.ecommerce,PID:3111 java.lang.NullPointerException:尝试调用空对象引用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)' at com.aug22.avinashchintareddy.ecommerce.adapters.ProductAdapt.getView(ProductAdapt.java:79) at android.widget.AbsListView.obtainView(AbsListView.java:2346) at android.widget.ListView.makeAndAddView(ListView.java:1875) at android.widget.ListView.fillDown(ListView.java:702) at android.widget.ListView.fillGap(ListView.java:666) 在android.widget.AbsListView.trackMotionScroll(AbsListView.java:5029) 在android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3424) 在机器人。 widget.AbsListView.onTouchMove(AbsListView.java:3820) at android.widget.AbsListView.onTouchEvent(AbsListView.java:3651) at android.view.View .dispatchTouchEvent(View.java:9294) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240) 在android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(的ViewGroup .java:2254) at android.view.ViewGroup android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 。 dispatchTouchEvent(ViewGroup.java:2254) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在android.view.ViewGroup.dispatchTransformedTouchEvent( ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup中。 java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGr oup.dispatchTouchEvent(ViewGroup.java:2254) 在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) 在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) 在android.view.ViewGroup。 dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup。Java的:2254)

这是错误日志

我的适配器类 输入代码在这里

在侧面得到视图中添加日志,检查发生了什么事,但不幸的是,当曾经的列表滚动渲染元素显示但不是所有的元素 也可以看到在获取视图大小时添加的日志。 适配器类。


     public class ProductAdapt 
     extends BaseAdapter { 
     List 
     productAcessorList ; 
     Context context; 
     LayoutInflater layoutInflater; 
     setClicker clicker; 

      public ProductAdapt(List 
       productAcessorList, Context context) { 
      this.productAcessorList = productAcessorList; 
      this.context = context; 
      layoutInflater=(LayoutInflater) 
      context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      } 

      @Override 
      public int getCount() { 

      Log.i("List size",""+ 
      productAcessorList.size()); 
      return productAcessorList.size(); 
       } 

      @Override 
      public Object 
      getItem(int i) { 
      return i; 
       } 

     @Override 
     public long getItemId(int i) { 
      return i; 
      } 

      public static class Handler{ 
      TextView tx_prodname, 
      tx_proddesc,tx_proid; 
      ImageView img_prd; 

      } 

      @Override 
      public View getView(final int i, 
      View myview, ViewGroup viewGroup) { 
      Handler handler = new Handler(); 
      if(myview == null){ 
       myview=layoutInflater.inflate 
       (R.layout.list_prod,viewGroup,false); 
       handler.tx_prodname=(TextView) 
       myview.findViewById(R.id.txt_categid); 
       handler.tx_proddesc=(TextView) 
       myview.findViewById(R.id.txt_descid); 
       handler.tx_proid=(TextView) 
       myview.findViewById(R.id.txt_idi); 
       handler.img_prd=myview. 
       findViewById(R.id.img_view); 

       myview.setTag(handler); 
      } 
      else 
      { 
       myview.getTag(); 

      } 

      Log.i("find fault",""+ 
      productAcessorList.get(i).getProduct()); 

      handler.tx_prodname. 
      setText(""+productAcessorList.get(i).getProduct()); 
      handler.tx_proddesc. 
      setText(""+productAcessorList.get(i).getDescrip()); 
      handler.tx_proid. 
      setText(""+productAcessorList.get(i).getId()); 
      Picasso.with(context). 
      load(""+productAcessorList. 
      get(i).getImage()). 
      into(handler.img_prd); 
      myview. 
      setOnClickListener 
      (new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


       if(clicker!=null){ 
        clicker.gotClick(view,i); 

       } 

       } 
      }); 

      return myview; 
     } 


     public void getClicker 
      (setClicker clicker){ 
      this.clicker=clicker; 

      } 

      } 



+0

Plaese将您的错误日志发布为文本而不是图片并正确地设置您的代码。 –

回答

0

而不是

myview.getTag(); 

你应该有

handler = (Handler) myview.getTag(); 

顺便说一句,通常这样的类被称为HolderViewHolder。它可以避免在每次getView调用中重复耗时的任务,如findViewById()调用。

对于每个新的项目视图,您创建一个视图持有者并填充它。然后你将它设置为视图标签。没关系。这一切都是为了能够稍后获取该标签并将其用作查看持有者。但是在你的代码中,你从来没有使用标签,而是用空字段访问一个空的持有者实例。

+0

Woow algrid它的工作,但我有类似的列表视图以前使用它正在为此工作。你能解释一下我需要在这里引用处理程序吗? –

+0

@avinashreddychintareddy补充了一些解释 – algrid

相关问题