こんにちは、ArrayAdapter を拡張するカスタム クラスがあります。アダプターの作成時に提供されるListオブジェクト データに従って、 ImageButtonの背景イメージを変更できるようにしたいと考えています。私の質問は、次のアプローチのどちらが優れているかです。
例えば:
1.レイアウトに単一の ImageButton ビューを配置し、setBackgroundResourceを使用して条件付きで ImageButton を変更する
public View getView(int position, View convertView, ViewGroup parent){ ....
if (myObject.getParent().equalsIgnoreCase("mom")){ holder.button.setBackgroundResource(R.drawable.button_a); }else if(myObject.getParent().equalsIgnoreCase("dad")){ holder.button.setBackgroundResource(R.drawable.button_b); } .... }
2.レイアウトに2つのImageButtonビューがあり、表示するImageButtonの可視性を変更するだけです
@Override public View getView(int position, View convertView, ViewGroup parent) { .... if (myObject.getParent().equalsIgnoreCase("mom")){ holder.buttonA.setVisibility(View.VISIBLE); holder.buttonB.setVisibility(View.GONE); }else if(myObject.getParent().equalsIgnoreCase("dad")){ holder.buttonB.setVisibility(View.VISIBLE); holder.buttonA.setVisibility(View.GONE); } .... }
3.このようなカスタムImageButton クラスを持つ
public class CustomButton extends ImageButton { public CustomButton(Context context) { super(context); // TODO Auto-generated constructor stub setForMom(); } public CustomButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public CustomButton(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public void setForMom(){ setBackgroundResource(R.drawable.button_a); } public void setForDad(){ setBackgroundResource(R.drawable.button_b); } public void hide() { this.setVisibility(View.GONE); } }
私は次のような記事を読んだことがあります。
- ビューが小さいほど良いです。(これは、カスタム ビュー クラスを使用することを意味する可能性があります)
- getView() 内の画像設定は、Android システムに多くの作業を引き起こします
- また、カスタムビューの方が優れているため、常にカスタムビューを使用するというものもあります
3つすべて試してみましたが、それでも同じパフォーマンスを持っているようです。何かを見逃している可能性がありますか、パフォーマンスを向上させるためにこれを行うより良い方法はありますか?
ところで: 私はhttps://github.com/huewu/PinterestLikeAdapterViewを使用しています。私のアプリの表示は pinterest のようです。クリックすると変更する画像、テキスト、および ImageButton (つまり、クリックすると背景を変更する画像ボタン) が表示されます。また、ビューのリサイクル方法も使用していますが、ここでは表示しませんでした..