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

Schreibe einen Kommentar