常に 7 つのアイコンを表示したい GridView があり、リクエストに応じて追加のアイコンを表示することもあります。最初は、追加のアイコンは表示されません。これは構造です:
0 1 2
3 4 5
6 [7]
すべてのアイコンが画面に収まるので、スクロールは必要ありません。各アイコンは、画像とテキストで構成されています。
このために、BaseAdapter を拡張する CustomAdapter があります。各アイコンのテキストと画像を設定する getView メソッドをオーバーライドしました。
public View getView(int position, View convertView, ViewGroup parent) {
View v = null;
if (convertView == null) {
LayoutInflater li = ((Activity) context).getLayoutInflater();
v = li.inflate(R.layout.icon, null);
} else {
v = convertView;
}
TextView tv = (TextView) v.findViewById(R.id.icon_textView);
tv.setText(position);
ImageView iv = (ImageView) v.findViewById(R.id.icon_ImageView);
iv.setImageResource(imageResourcesArray[position]);
if ((position == ADDITIONAL_ICON)) && !showAdditionalIcon) {
v.setVisibility(View.INVISIBLE);
}
return v;
}
はimageResourcesArray[]
、画像リソースを含む整数の配列です。CustomAdapter のその他の関数と変数は次のとおりです。
public static final int ADDITIONAL_ICON = 7;
private boolean showAdditionalIcon = false;
public showAdditionalIcon(){
this.showAdditionalIcon = true;
notifyDataSetChanged();
// notifyDataSetInvalidated();
}
public hideAdditionalIcon(){
this.showAdditionalIcon = false;
notifyDataSetChanged();
// notifyDataSetInvalidated();
}
ClassA
後で、Activity を拡張するクラス (たとえば)から CustomAdapter を作成して GridView に設定します。
GridView grid = (GridView) findViewById(R.id.main_gridView);
customAdapter = new CustomAdapter(this);
grid.setAdapter(customAdapter);
私の問題は、いくつかの計算とサーバーへのリクエストの後、追加のアイコン (番号 7) を表示する必要がある場合に発生します。だから私は(から)呼び出すClassA
:
customAdapter.showAdditionalIcon();
これで、追加のアイコンが表示されますが、最初のアイコンが消えます...使用しようとしましnotifyDataSetInvalidated()
たnotifyDataSetChanged()
が、両方とも同じ結果になりました。
もちろん、CustomAdapter
許可された追加のアイコンを使用して新しいアイコンを生成することもできますが、それをしない方がよいでしょう...
前もって感謝します。