0

BaseAdapterアダプター内に次のコードがあります。

public View getView(final int position, View convertView, ViewGroup parent) {
   View vi=convertView;

   if(convertView==null) 
       vi = inflater.inflate(R.layout.facebook_friends_layout, null);

   TextView friendsName = (TextView)vi.findViewById(R.id.tvFacebookName); // Friends thumb
   friend_image=(ImageView)vi.findViewById(R.id.ivFacebookPicture);  // thumb image

   song= new HashMap<String, String>();
   song = data.get(position);
   friendsName.setText(song.get(MyFriends.KEY_FBNAME));
   //Log.i("Facebook Pangalan", ""+MyFriends.KEY_FBNAME);

   FriendName = (String) friendsName.getText().toString();

   FBID = song.get(MyFriends.KEY_FBID); 
   String fbAvatarUrl = "http://graph.facebook.com/"+ FBID +"/picture";
   //Log.i("FBID", FBID);
   BitmapManager.INSTANCE.loadBitmap(fbAvatarUrl, friend_image, 100,100);
   Button btn=(Button)vi.findViewById(R.id.btnAdd);
   if (FBID.equals(""))
   {
       btn.setVisibility(View.GONE);
   }
   else 
   {
       btn.setVisibility(View.VISIBLE); 
   }
   btn.setOnClickListener(new OnClickListener(){ 

       public void onClick(View arg0) {
           LOCK_BASEDATA = MyFriends.LOCK_BASEDATA;
           if (LOCK_BASEDATA.equals("0")) 
           {
               //FACEBOOK FRIENDS
               Log.i("", ""+FriendName);
               //AddfromFacebookFriends();
           }
           else if (LOCK_BASEDATA.equals("1"))
           {
               //MY REQUEST
               //((MyFriends)context).SetMyRequest();
               //Log.i("LangYa", "Langya");
           }
           else if (LOCK_BASEDATA.equals("2"))
           {
               //FRIEND REQUEST
               //((MyFriends)context).SetFriendRequest();
               //d2papasok
               AddFriendRequest();
           }

       }

    });

   return vi;
}

ボタンをクリックするたびに友達の名前を記録しています。ボタンをクリックすると問題が発生します。希望の文字列が得られません。リストビューの別の行から文字列を取得しています。

編集 ありがとう、実際にiveはちょうどこのコードをaaded

public void onClick(View arg0) {
                LOCK_BASEDATA = MyFriends.LOCK_BASEDATA;
                if (LOCK_BASEDATA.equals("0")) 
                {
                    //Object x =btn.getTag();
                    //String sa = x.toString();
                    View parentView = (View) arg0.getParent();
                    String textviewtext = ((TextView) parentView.findViewById(R.id.hiddentv)).getText().toString();
                    //FACEBOOK FRIENDS

                    AddfromFacebookFriends(textviewtext);

                }
                else if (LOCK_BASEDATA.equals("1"))
                {

両親のビューを取得して目的のテキストビューを取得しているところですが、機能します。とにかくありがとう

4

3 に答える 3

2

次のコードを使用してFriendNameを取得しようとしています。

TextView friendsName = (TextView)vi.findViewById(R.id.tvFacebookName);
FriendName = (String) friendsName.getText().toString();

これは、クリックしたListViewアイテムのFriendNameではありません。新しく作成されたListViewアイテムのFriendNameです。getView()では、取得するListViewアイテムは新しく作成されたアイテムであるためです。

これを解決する1つの方法は次のとおりです。

KunalKが提案するようなタグを使用してください。それがうまくいくかどうかはわかりません...私はそれを試したことがありません。

または他の方法は次のとおりです。

onButtonClickedは、PositionクリックしたListViewアイテムのを取得し、Name使用しているArrayListからそれぞれを取得します。

ここでは、getView()にPositionはありません。position parameterこれにより、新しく作成されたListViewアイテムの位置が再び表示されます。

これを使用して、クリックされたアイテムの実際の位置を取得します。

int clickedItemPosition = yourListView.getPositionForView((View) yourButton.getParent());
于 2012-09-14T05:32:27.010 に答える
1

ボタンのsetTagプロパティに「FriendName」を設定して、これを実行する必要があります。ボタンクリックイベントを処理するときはいつでも、buttonのgetTagプロパティを使用してFriendName文字列をフェッチします。たとえば、次のようなものです。

....
btn.setTag(FriendName);
btn.setOnClickListener(new OnClickListener(){ 
   public void onClick(View arg0) {
       LOCK_BASEDATA = MyFriends.LOCK_BASEDATA;
       if (LOCK_BASEDATA.equals("0")) 
       {
           //FACEBOOK FRIENDS
           Log.i("", ""+btn.getTag().toString());
           //AddfromFacebookFriends();
       }
       else if (LOCK_BASEDATA.equals("1"))
       {
           //MY REQUEST
           //((MyFriends)context).SetMyRequest();
           //Log.i("LangYa", "Langya");
       }
       else if (LOCK_BASEDATA.equals("2"))
       {
           //FRIEND REQUEST
           //((MyFriends)context).SetFriendRequest();
           //d2papasok
           AddFriendRequest();
       }

   }

});
....
于 2012-09-14T04:25:01.357 に答える
0

リストから名前を取得するには、次のようにonListItemClickメソッドを使用します(アダプターではなく、リストのあるクラスで)。

@Override
public void onListItemClick(ListView l, View v, int position, long id) {
    TextView friendsName = (TextView)v.findViewById(R.id.tvFacebookName);   
    FriendName = (String) friendsName.getText().toString();    
}

このコードはonListItemClickメソッドであるため、View vパラメーターはクリックした行のビューです。それができたら、その特定の行ビューで必要なTextViewを検索し、そこから文字列をプルします。

あなたは正しい考えを持っていました、あなたはそれを間違った場所に置いただけです。

于 2012-09-14T06:34:00.950 に答える