0
このlinkに基づいてリストビュー内の少数の行に対して異なるレイアウトを持つサンプルを作成しました。ここでは、レイアウトリストビュー内の別の行を更新できません
は、位置がゼロである時はいつでも私は、異なるレイアウトを持っている最初の行だけをしたいと私はレイアウト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;
}
bravo !!これは私が感謝したかったものです – Hunt