当前位置: 代码迷 >> java >> Android ListView适配器-隐藏项目
  详细解决方案

Android ListView适配器-隐藏项目

热度:108   发布时间:2023-08-04 09:34:52.0

我有一个android listView,它会像这样填充:

final ListView userList = (ListView)root.findViewById(R.id.userList);
UserListAdapter adapter = new UserListAdapter(context, userItemList,
getActivity());
userList.setAdapter(adapter);

而UserListAdapter看起来像这样:

if (convertView == null) {
    LayoutInflater mInflater = (LayoutInflater)
            context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    convertView = mInflater.inflate(R.layout.user_item_list, null);
}
final TextView txtButtonFollow = (TextView) convertView.findViewById(R.id.button);
if(user == "showed") {
    button.setVisibility(View.INVISIBLE);
}else {
    button.setVisibility(View.INVISIBLE);
}
return convertView;

由于某种原因,将显示所有用户按钮(第一个),但是如果我上下滚动列表并“重新输入”用户项目,则按钮将被隐藏(这是我所需要的)。

有人有同样的问题吗? 是否可以隐藏“滚动”元素? 我是否必须设置两个user_item_list(一个带有按钮,另一个带有不带按钮)?

编辑:这里完整的getView():

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    UserItem userItem = userItems.get(position);
    RelativeLayout userListItemMain = (RelativeLayout)convertView.findViewById(R.id.userListItemMain);
    String isContact = userItem.getIsContact();

    if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater)
                context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    }

    final TextView txtButton = (TextView) convertView.findViewById(R.id.button);
    if(isContact) {
        txtButton .setVisibility(View.VISIBLE);
    }else{
        txtButton .setVisibility(View.INVISIBLE);
    }
    return convertView;
}

你可以改变这个

 UserListAdapter adapter = new UserListAdapter(context, userItemList,getActivity());

UserListAdapter adapter = new UserListAdapter(userItemList,getActivity());

getActivity()将为您提供上下文。

相应地更改适配器构造函数

使用ViewHolder模式

public static class ViewHolder
{
     TextView txtButton ;
} 

在getView中

  ViewHolder holder;
  if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater)
                context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.user_item_list, null);
        holder.txtButton  = (TextView) convertView.findViewById(R.id.button); 
        convertView.setTag(holder) 
    } else {

         holder = (ViewHolder) convertView.getTag();
    } 
    UserItem userItem = userItems.get(position);
    String isContact = userItem.getIsContact();

    if(isContact.equals("showed")) {
    holder.txtButton .setVisibility(View.VISIBLE);
   }else{
     holder.txtButton .setVisibility(View.INVISIBLE);
   }

return convertView;

您的if陈述

 if(isContact) { // makes no sense. isContact is not boolean
  相关解决方案