Wie force redraw der listview?
Diese Frage ist ein wenig anders als andere ähnliche Titel. Ich bin nicht versuchen, die Daten zu aktualisieren in der Liste, ich bin versucht, zu aktualisieren, die Aussehen der Liste.
Meine app-fragment basiert, mit der Bibliothek unterstützt. Ich habe eine PreferenceActivity, wo ich dem Benutzer zu ermöglichen, legen Sie die Farben, die Sie möchten für den text in eine Liste (der adapter liest die Voreinstellung und legt die Farben). Dies funktioniert wie erwartet, zum größten Teil.
Das Problem das ich habe ist wie folgt. Wenn ich die Liste auf dem Bildschirm (es ist ein ListFragment) und pull-up-Menü, wählen Sie Einstellungen und ändern Sie die bevorzugte Farbe. Nach der Rückkehr in die Liste, aus der PreferenceActivity, ich kann nicht scheinen, um die Liste neu zu zeichnen, sich mit der neuen Farbe angegeben.
Wenn ich navigieren Weg von der Liste und kommen zurück, um es, es erneuert sich mit der neuen Farbe.
Ich versuche, mit onResume
um die änderung vorzunehmen. Der code, den ich derzeit habe (das scheint nicht alles zu tun, um die Liste, sondern ändert die Farbe der Kopfzeile, wie es sollte):
@Override
public void onResume() {
super.onResume();
header.setTextColor(MyApplication.header);
line.setBackgroundColor(MyApplication.header_line);
subheader.setTextColor(MyApplication.header);
getListView().invalidateViews();
}
Habe ich versucht invalidateViews
und invalidate
. In der Verzweiflung habe ich versucht, Sie anzurufen notifyDataSetChanged
auf den adapter, obwohl es keine änderungen an den Daten selbst. Nichts scheint zu funktionieren.
Übersehe ich etwas offensichtliches, oder gibt es keine Möglichkeit, dies zu tun?
BEARBEITEN
'GetView-Methode" von meinem adapter:
@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);
}
InformationsquelleAutor Barak | 2012-06-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
notifyDataSetChanged()
sollte auf jeden Fall für Sie arbeiten. Wie behandeln Sie die Voreinstellung ändern? Wenn Sie nur Begehen Sie die Einstellung auf die SharedPreferences dann ist es nie die Aktualisierung der statischen MyApplication variable. Können Sie nach dem code, die Sie verwenden, um die Einstellung? Wenn Sie Sie nicht verwenden, legen Sie eineonPreferenceChangedListener()
für die bevorzugte Farbe eingestellt werden, dass statische variable, wenn es geändert wird.MyApplication.setPreferences
. Die Methode istMyApplication.setPrefs
. seufzInformationsquelleAutor kcoppock
Sollten Sie rufen notifyDataSetChanged() auf Ihrem adapter.
können Sie Ihre getView () - Methode vom adapter?
Frage bearbeitet, um hinzufügen
getView
Methode.Wo in der getView() legen Sie die Farbe des Textes, um eine Farbe aus den Einstellungen?
first.setTextColor(MyApplication.shoplistitem_name);
. Wenn die PreferenceActivity beendet es ruft eine Methode ausMyApplication
liest alle Einstellungen in statische Variablen verwendet werden, überall in der app.InformationsquelleAutor Gallal
Entkräften, invalidateviews, notifyDatasetChanged, nix für mich gearbeitet!
Nur aktualisieren Sie die Listenansicht (mit cursoradapter -) ich Tue gerade:
Aber um den richtigen hintergrund Farbe, drawable, text unterstreichen, ich Tue gerade:
Ich nicht wie Barak Lösung cos es scheint, schweres Gewicht, und führt code aus, wenn nicht benötigt.
InformationsquelleAutor Jackd