2011-06-25 8 views
0

このlinkに基づいてリストビュー内の少数の行に対して異なるレイアウトを持つサンプルを作成しました。ここでは、レイアウトリストビュー内の別の行を更新できません

Here is my layout

は、位置がゼロである時はいつでも私は、異なるレイアウトを持っている最初の行だけをしたいと私はレイアウト1を適用しています(&電話番号を名前)と残りの私はレイアウト2(アドレスを適用していますです)。

アダプターで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; 

    } 

答えて

0

私の知る限りでは、あなたは、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;  
+0

bravo !!これは私が感謝したかったものです – Hunt

関連する問題