2017-09-09 4 views
0

カスタムアダプターを使用してリストビューを表示していますが、残念ながらスクロールするとヌルオブジェクト参照が表示されます。スクロールカスタムアダプターのエラーを示すリストビュー

私は前の質問を見ましたが、何も考えられませんでしたか?

スクリーンショット:

[ここで、画像の説明を入力] [1]

9月9日13:39:53.949 3111から3111/com.aug22.avinashchintareddy.ecommerce E/AndroidRuntime:致命的な例外:メイン プロセス:com.aug22.avinashchintareddy.ecommerce、PID:3111 java.lang.NullPointerException:NULLオブジェクト参照で仮想メソッド 'void android.widget.TextView.setText(java.lang.CharSequence)'を呼び出そうとしています com.aug22.avinashchintareddy.ecommerce.adapters.ProductAdapt.getView(ProductAdapt.java:79)android.widget.AbsListView.obtainViewの(AbsListView.java:2346)android.widget.ListView.makeAndAddView(ListView.java:1875)の 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)の はandroidです。ウィジェット.AbsListView.onTouchMove(AbsListView.java:3820) (android.widget.AbsListView.onTouchEvent(AbsListView.java:3651)) android.view.View android.view.ViewGroup.dispatchTransformedTouchEventでandroid.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240) でandroid.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547) で.dispatchTouchEvent(View.java:9294) android.view.ViewGroup.dispatchTouchEvent(のViewGroupにandroid.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)でandroid.view.ViewGroup.dispatchTouchEventで(ViewGroup.java:2553) (ViewGroup.java:2254) .java:2254) (android.view.View.View.View.View.View.View.View.View.View.View.Group)で、 が表示されます(ViewGroup.java:2553)。 dispatchTouchEvent(ViewGroup.java:2254)android.view.ViewGroup.dispatchTransformedTouchEventでandroid.view.ViewGroup.dispatchTouchEventでandroid.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) (ViewGroup.java:2254) (AT (ViewGroup.java:2553) (android.view.View.View.Dava): (android.view.View.View.View.View.DavidTouchEvent(ViewGroup.java:2553) )は、 java:2254) android.view.View.View.View.ViewGr(ビューグループ.java:2553) oup.dispatchTouchEvent(ViewGroup.java:2254) (android.view.View.View.View.View.View.View.View.Java:2553) android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) android.view.ViewGroup。 android.view.View.ViewGroup.dispatchTouchEvent(viewGroup。)のdispatchTransformedTouchEvent(ViewGroup.java:2553) です。Javaの:ビューは、リストがスクロールされ、これまでのレンダリング要素が示されたときに、残念ながら起こったが何をチェックするログイン2254)

これは、エラーログ

マイアダプタクラス であるが、ここで

側のコードを入力し追加されます要素のすべてではありません また、ビューサイズを取得する際に追加されたログを見ることができます。 アダプタクラス。代わりに

myview.getTag(); 


     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

あなたがところで

handler = (Handler) myview.getTag(); 

を持っている必要があり、通常、このようなクラスはHolderまたはViewHolderと呼ばれています。すべてのgetView呼び出しでfindViewById()呼び出しのような時間のかかる作業を繰り返さないようにします。

新しいアイテムビューごとに、ビューホルダーを作成して記入します。次に、ビュー・タグとして設定します。大丈夫です。これは後でこのタグを取得してビューホルダーとして使用できるようにするために行われます。しかし、あなたのコードでは、タグを使用したことはありませんでした。代わりにnullフィールドを持つ空のホルダーインスタンスにアクセスしていました。

+0

Woow algridは動作していますが、それ以前に使用されていた同様のリストビューを使っていました。私はここでハンドラを参照する必要があることを説明できますか? –

+0

@avinashreddychintareddyさんが少し説明を追加しました – algrid

関連する問題