2017-09-09 17 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

相關問題