无法更新ListView中的其他行

| 我基于此链接创建了一个示例,其中ListView中的几行具有差异布局。这是布局 因为我只希望第一行具有不同的布局,所以当位置为零时,我将应用布局一(名称和电话),而对于其余部分,我将应用布局二(地址)。 我面临的问题是当我在适配器上触发notifyDataSetChanged时,只有我的地址被更改了,但名称和电话行(即第一行)没有更新。选择子菜单项时,我将触发notifyDataSetChanged。 这是代码。
public static final int TYPE_ADDRESS = 1;
public static final int TYPE_NAME = 0;
public static final int TYPE_MAX_COUNT =2;

@Override
public int getItemViewType(int position) {
    if(position == 0)
        return TYPE_NAME;
    else
        return TYPE_ADDRESS;
}
@Override
public int getViewTypeCount() {
    return TYPE_MAX_COUNT;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {


    ViewHolder holder=null;
    int type = getItemViewType(position);
    System.out.println(\"getView \" + position + \" \" + convertView + \" type = \" + type);




 if (convertView == null) {
     holder = new ViewHolder();


    switch (type) {
        case TYPE_ADDRESS:
                    convertView = mInflater.inflate(R.layout.layout_address, null);
                    holder.address = (TextView) convertView.findViewById(R.id.address_id);                  
                    holder.address.setText(data.getAddress(position));


                    break;

        case TYPE_NAME:                        
                    convertView = mInflater.inflate(R.layout.layout_name, null);                    
                    holder.name = (TextView)convertView.findViewById(R.id.name_id);
                    holder.phone = (TextView)convertView.findViewById(R.id.phone_id);



                    holder.name.setText(data.getName(position));
                    holder.phone.setText(data.getPhone(position));




                    break;
    }

        convertView.setTag(holder);          

   }else {

    holder = (ViewHolder) convertView.getTag();
   }    



    return convertView;
}



static class ViewHolder {
        TextView address;
        TextView name;
        TextView phone;

    }
    
已邀请:
        AFAIK,您需要在
if (convertView == null){}else{}
块之外管理视图(如设置文本),因为无论在任何情况下都需要调用它,而不仅是在创建视图时。可能是问题吗?
if (convertView == null) {
     holder = new ViewHolder();


    switch (type) {
        case TYPE_ADDRESS:
                    convertView = mInflater.inflate(R.layout.layout_address, null);
                    holder.address = (TextView) convertView.findViewById(R.id.address_id);                                     

                    break;

        case TYPE_NAME:                        
                    convertView = mInflater.inflate(R.layout.layout_name, null);                    
                    holder.name = (TextView)convertView.findViewById(R.id.name_id);
                    holder.phone = (TextView)convertView.findViewById(R.id.phone_id);

                    break;
    }

        convertView.setTag(holder);          

   }else {

    holder = (ViewHolder) convertView.getTag();
   }    

   switch (type) {
        case TYPE_ADDRESS:
              holder.address.setText(data.getAddress(position));
              break;
        case TYPE_NAME:                        
              holder.name.setText(data.getName(position));
              holder.phone.setText(data.getPhone(position)); 
              break;       
    

要回复问题请先登录注册