この質問は、類似のタイトルの他の質問とは少し異なります。私はリストのデータを更新しようとしていません、私はのリストを参照してくださいを更新しようとしています。リストビューの再描画を強制するには?
私のアプリは、サポートライブラリを使用してフラグメントベースです。私はPreferenceActivityを持っています。ここでは、リスト内のテキストの色を設定することができます(アダプターは、プリファレンスを読み取り、色を設定します)。これは、ほとんどの場合、期待どおりに動作しています。
問題は次のとおりです。画面上にリスト(ListFragment)が表示され、メニューが表示されたら、「環境設定」を選択して色の設定を変更します。 PreferenceActivityからリストに戻ると、指定した新しい色でリストを再描画するようには思えません。
リストから離れて戻ってくると、新しい色で再生されます。
私はonResume
を使用して変更しようとしています。私は現在持っているコードは(それはリストに何かをするように見えるが、それは必要として、ヘッダーの色を変更しません):
@Override
public void onResume() {
super.onResume();
header.setTextColor(MyApplication.header);
line.setBackgroundColor(MyApplication.header_line);
subheader.setTextColor(MyApplication.header);
getListView().invalidateViews();
}
私はinvalidateViews
とinvalidate
を試してみました。私は絶望的に、データ自体に変更がなくても、notifyDataSetChanged
をアダプタで呼び出そうとしました。何も動作していないようです。
明らかなものがないか、これを行う方法はありませんか?
EDIT
私のアダプタから「getView`方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null)
convertView = View.inflate(context, layout, null);
View row = convertView;
c.moveToPosition(position);
TextView first = (TextView) convertView.findViewById(R.id.ListItem1);
TextView second = (TextView) convertView.findViewById(R.id.ListItem2);
TextView third = (TextView) convertView.findViewById(R.id.ListItem3);
TextView fourth = (TextView) convertView.findViewById(R.id.ListItem4);
DecimalFormat df = new DecimalFormat("0.00");
Double hold = Double.valueOf(c.getString(3));
Double qty = Double.valueOf(c.getString(1));
Double total = hold * qty;
String color = "#FF00FF";
first.setText(c.getString(2));
first.setTextColor(MyApplication.shoplistitem_name);
second.setText(c.getString(4));
second.setTextColor(MyApplication.shoplistitem_desc);
third.setText(c.getString(1));
third.setTextColor(MyApplication.shoplistitem_qty);
fourth.setText("$" + df.format(total));
fourth.setTextColor(MyApplication.shoplistitem_desc);
if (strikethroughState[position] == 1) {
first.setPaintFlags(first.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
second.setPaintFlags(second.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
third.setPaintFlags(third.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
fourth.setPaintFlags(third.getPaintFlags()
| Paint.STRIKE_THRU_TEXT_FLAG);
row.setBackgroundColor(MyApplication.shoplistitem_checked);
} else {
first.setPaintFlags(first.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
second.setPaintFlags(second.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
third.setPaintFlags(third.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
fourth.setPaintFlags(third.getPaintFlags()
& ~Paint.STRIKE_THRU_TEXT_FLAG);
row.setBackgroundResource(R.color.black);
}
return (row);
}
まあ...これは私の問題を見つけるのに向いていた...そして、私は信じられないほど馬鹿だと感じる。私は 'MyApplication.setPreferences'を呼び出していました。このメソッドは 'MyApplication.setPrefs'です。 *一口* – Barak