【问题标题】:Android get Textview text on the same row of listviewAndroid在listview的同一行获取Textview文本
【发布时间】:2012-09-14 15:10:32
【问题描述】:

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

我只是让我的父母查看以获得我想要的文本视图,现在它可以工作了。还是谢谢

【问题讨论】:

  • 什么是desired string(你的friendsname)?
  • @Killrawr 它必须基于同一行。我在列表视图的另一行得到字符串
  • 您应该添加页眉或页脚视图或类似的东西。请尝试单击 Last 和 First 项目。你有例外吗?
  • 尝试使用onItemClickListener
  • @SherifelKhatib 我没有例外

标签: java android


【解决方案1】:

您正在尝试使用此代码获取 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());

【讨论】:

    【解决方案2】:

    您应该通过在按钮的 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();
           }
    
       }
    
    });
    ....
    

    【讨论】:

      【解决方案3】:

      可以使用 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,然后从中提取字符串。

      你的想法是对的,只是放错地方了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多