ローのサイズ変更時に機能しないリストラグメント内の行の代替背景
-
11-12-2019 - |
質問
カスタムListFragmentを使用して、行さえバックグラウンドと奇数行がないリストを表示しています。これを行うには、オーバーライデンスのgetView(int、view、viewgroup)メソッドを使用してArrayAdapterのサブクラスを作成し、そこでさえさえ偶数行のバックグラウンドリソースを設定しました。
働きましたが、バックグラウンドの有無にかかわらず、ビューの寸法を同じように調整する必要があるため、LayoutParamsを次のように調整しました。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if ((position & 1) == 0) {
view.setBackgroundResource(R.drawable.marcador_wink_normal);
}
ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = rowHeight;
view.setLayoutParams(params);
return view;
}
.
私はこれを試してみました、そして、私がスクロールしてから上がるまで働いているようでした。
私の質問は:私は何を間違っているのですか?
フラグメントのV4サポートライブラリを使用しています。これは、カスタムListFragmentのoncreate(バンドル)メソッドです。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;
setListAdapter(new WinkAdapter(getActivity(), layout, TEST_LIST));
}
. 解決
リストを構成するために使用されるビューは、画面に表示されずに再利用されます。
あなたの元のコードでは、与えられたビューで背景がR.drawable.marcador_wink_normalに設定されたら、常にr.dwable.marcador_wink_normalでした。他のものを追加したら、これらの再利用されたビューで背景を正しく設定しました。
他のヒント
大丈夫、 eles 文を追加するだけで解決しました:
.
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
if ((position & 1) == 0) {
view.setBackgroundResource(R.drawable.marcador_wink_normal);
}
else {
view.setBackgroundColor(0);
}
ViewGroup.LayoutParams params = view.getLayoutParams();
params.height = 100;
view.setLayoutParams(params);
return view;
}
しかし、問題が起こった理由はまだわかりません。