忍者ブログ

とある社内SEの備忘録 !!

主にRPA、Androidアプリ開発について投稿しています。メモ書きです。

LitViewで、子要素のレイアウトを動的に変更する

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

LitViewで、子要素のレイアウトを動的に変更する


ListViewの子要素であるListItemでは、条件別にレイアウトを変更したいときがある。
dividerの色を変更だとか、いろいろViewについていじってると、スクロール後に再表示させると崩れて表示されてしまい、とても残念。

以下の方法で解決できた。



1.Adapterで getItemViewType getViewTypeCount をそれぞれオーバーライドする。
@Override
public int getItemViewType(int position) {
//最初のデータ or データ数が1以下
if(position == 0 || items.size() <= 1){
return 0;
}
GenbaData prevData = items.get(position - 1);
GenbaData data = items.get(position);

//現場の比較
if(!prevData.getGenbaName().equals(data.getGenbaName())){
return 0;
}
//品目の比較
if(!prevData.getHinmoku().equals(data.getHinmoku())){
return 1;
}else{
return 2;
}
}
@Override
public int getViewTypeCount() {
return 3;//Viewのタイプ数
}

2.getView でタイプ別にレイアウトファイルを指定する。
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
View view;

switch (getItemViewType(position)){
case 0:
if(convertView == null){
convertView = inflater.inflate(R.layout.input_list_item_01,parent,false);
}
break;
case 1:
if(convertView == null){
convertView = inflater.inflate(R.layout.input_list_item_02,parent,false);
}
break;
case 2:
if(convertView == null){
convertView = inflater.inflate(R.layout.input_list_item_03,parent,false);
}
break;
default:
//ありえない
}

これだけ。わかってしまうと簡単でした。

PR

コメント

プロフィール

HN:
Satoshin
性別:
男性
職業:
開拓エンジニア
趣味:
ダーツ、麻雀、カラオケ、ジョギング
自己紹介:
横浜在住の30代♂

某企業の情報システム部門に所属。
⇒転職活動中

業務効率化を推進しつつ自社用Androidアプリを開発している。
言語:Java、VB.NET、VBA、ASP.NET、C#
興味:Kotlin、Python、AWS、UiPath

横浜圏の友人皆無・・(´;ω;`)
RPA、ダーツ、麻雀、飲み仲間募集中w

麻雀格闘倶楽部はココに出没中

AbemaTVでM.LEAGUE鑑賞中!!

P R