簡體   English   中英

Android在ListView的同一行上獲取Textview文本

[英]Android get Textview text on the same row of listview

我的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;
}

每當我單擊按鈕時,我就會記錄我朋友的名字。 現在,當我單擊按鈕時,問題就開始了。 我沒有得到想要的字符串。 它是從列表視圖的另一行獲取字符串。

編輯謝謝,實際上我已經將這段代碼添加了

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"))
                {

我只是在獲取我的父母視圖以獲取所需的textview,現在可以使用了。 不管怎么說,還是要謝謝你

您正在嘗試使用以下代碼獲取FriendName:

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

這不是您單擊的ListView項的FriendName。 它是新創建的ListView項的FriendName。 因為在getView()中,您獲得的ListView項是新創建的項。

解決此問題的一種方法是:

建議使用類似KunalK的標簽。 我不確定它是否有效...我從未嘗試過。

或另一種方式是:

onButtonClicked獲取您單擊的ListView項的Position ,並從您正在使用的ArrayList中獲取相應的Name

這里的Position不是getView()中的position parameter 這再次給出了新創建的ListView項的位置。

使用它來獲取單擊項的實際位置:

int clickedItemPosition = yourListView.getPositionForView((View) yourButton.getParent());

您應該通過在按鈕的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();
       }

   }

});
....

可以通過使用如下的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,然后從中拉出字符串。

您有正確的想法,只是將其放在錯誤的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM