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

每当我点击按钮时,我都会记录我朋友的名字。现在,当我单击按钮时,我的问题就开始了;我没有得到我想要的字符串。它正在从我的列表视图的另一行获取字符串。

编辑 谢谢,实际上我刚刚添加了这段代码

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项是新创建的。

解决此问题的一种方法是:

使用 KunalK 建议的标签。我不确定它是否有效……我从未尝试过。

或者另一种方式是:

onButtonClicked 获取Position您单击的 ListView 项,并Name从您正在使用的 ArrayList 中获取相应项。

这里Position不是position parametergetView() 中的。这再次给出了新创建的 ListView 项的位置。

使用它来获取点击项目的实际位置:

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

您应该通过在按钮的 setTag 属性中设置“FriendName”来实现这一点。并且每当您处理按钮单击事件时,使用按钮的 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 回答