2016-06-27 8 views
1

次のコードがあり、nullポインタ例外が発生します(下記参照)。ビューの所有者が指し示すuserNameを取得したい。私もビュー(v)を介してそれを取得しようとしましたが、私は同じ例外があります。なぜ値がnullであるのか分かりません。ここでアダプタからのヌルポインタリファレンスsetOnClickListener

public class ContactAdapter extends BaseAdapter { 

     private Context mContext; 


     public ContactAdapter(Context context) { 

      mContext = context; 
     } 


     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      ViewHolder holder; 

      if (convertView == null) { 
       convertView = LayoutInflater.from(mContext).inflate(R.layout.item_contact, null); 
       holder = new ViewHolder(convertView); 
       convertView.setTag(holder); 

      } else { 

       holder = (ViewHolder) convertView.getTag(); 
      } 

    holder.delete.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        try { 
         ViewHolder vv = (ViewHolder)v.getTag(); 
         TextView tv = (TextView) vv.userName.getText(); // Exception here - Line 120 
        }catch(Exception xx){ 

        } 
       } 
    }); 
} 

    private class ViewHolder { 

      TextView userName; 
      ImageView add, delete, block,profImage; 

      public ViewHolder(View view) { 

       userName = (TextView) view.findViewById(R.id.user_name); 
       add = (ImageView) view.findViewById(R.id.add); 
       delete = (ImageView) view.findViewById(R.id.delete); 
       block = (ImageView) view.findViewById(R.id.block); 
       profImage = (ImageView) view.findViewById(R.id.profile_image); 
      } 
     } 

は例外です: enter image description here

+0

をテキストを取得。 holder.delete.setTag(holder); – Ani

+0

この_ViewHolderでvv =(ViewHolder)v.getTag(); _ u r削除ボタン_v.getTag()_のタグを取得しました。 – Piyush

答えて

0
view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       try { 
        ViewHolder vv = (ViewHolder)v.getTag(); 
        TextView tv = (TextView) vv.userName.getText(); 
       }catch(Exception xx){ 

       } 
      } 
}); 

あなたはviewholderコンストラクタ内でこれを試してみました...私はあなたがホルダーにクリックのリスナーに設定されているので、あなたがnullポインタ例外を取得していると思います。削除

0

'ViewHolder holder;を置き換えます。 「最終的なViewHolderホルダー」によってそしてonClickの方法で、単に実行してビューにアクセスする 'holder.userName.getText()' 等...

+0

クール - それは動作します。 – kingchuck

+0

私の喜び!あなたの質問に答えられたら、それを受け入れてください。 – user3793589

0

あなたはあなたのconvertViewのためのタグを設定し

0
holder.delete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       try { 
        ViewHolder vv = (ViewHolder)v.getTag(); 
        TextView tv = (TextView) vv.userName.getText(); // Exception here - Line 120 
       }catch(Exception xx){ 

       } 
      } 
}); 

、これを試してみてください、しかし、あなたconvertTVの子からgetTag()です。それはそれを修正するにはnull

なります:

  1. 最終最終ViewHolderホルダーにあなたのViewHolderを変更

  2. 私はあなたが最初のsetTagに必要だと思うあなたの所有者から直接

    holder.delete.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           try { 
            TextView tv = (TextView) holder.userName.getText(); 
           }catch(Exception xx){ 
    
           } 
          } 
    }); 
    
+0

ありがとうございます。これは動作します! – kingchuck

関連する問題