Lieblingsinhalte werden in der Webansicht nicht korrekt angezeigt

91

Ich entwickle eine Sprachwörterbuch-App. Ich speichere das Lieblingswort in Preference. Der Lieblingsinhalt in der XML-Datei sieht folgendermaßen aus:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
  <map>
    <string name="history">
      dict_name::160170::hi,dict_name::157140::he-man,dict_name::184774::jet,dict_name::34527::black
    </string>
    <string name="waitingTime">
      0
    </string>
    <boolean name="saveFavourite" value="true" />
    <string name="defaultDictionary">
      dict_name
    </string>
    <string name="favourite">
      dict_name::149271::go,dict_name::25481::back,dict_name::184774::jet
    </string>
    <boolean name="saveHistory" value="true" />
  </map>

Ich verwende den folgenden Code, um den Lieblingsinhalt in die Webansicht zu laden:

public class User extends Activity {
    private static final String FAVOURITE_TAG = "[MyDict - FavouriteView] ";
    private static final String CONTENT_TAG = null;

    private ListView mLSTFavourite = null;
    private ArrayList<String> lstDict = null;
    private ArrayList<Integer> lstId = null;
    private ArrayList<String> mWordFavourite = null;
    private ArrayAdapter<String> aptList = null;
    private SharedPreferences prefs;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.favourite);
        prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        if (prefs.getBoolean("saveFavourite", true)) {
            String strFavourite = prefs.getString("favourite", "");
            Log.i(FAVOURITE_TAG, "Favourite loaded");
            if (strFavourite != null && !strFavourite.equals("")) {
                mWordFavourite = new ArrayList<String>(Arrays.asList(strFavourite.split(",")));
            } else {
                mWordFavourite = new ArrayList<String>();
            }
        } else {
            mWordFavourite = new ArrayList<String>();
        }

        Log.d(FAVOURITE_TAG, "mWordFavourite = " + mWordFavourite.size());
        mLSTFavourite = (ListView) findViewById(R.id.lstFavourite);

        ImageButton btnClear = (ImageButton) findViewById(R.id.btnClear);
        ImageButton btnBackToContent = (ImageButton) findViewById(R.id.btnBackToContent);

        if (lstDict == null) {
            lstDict = new ArrayList<String>();
            lstId = new ArrayList<Integer>();
            aptList = new ArrayAdapter<String>(getApplicationContext(), R.layout.customlist);
        }
        lstDict.clear();
        lstId.clear();
        aptList.clear();

        if (mWordFavourite != null && mWordFavourite.size() > 0) {
            try {
                for (int i = 0; i < mWordFavourite.size(); i++) {
                    Log.i(FAVOURITE_TAG, "item = " + mWordFavourite.get(i));
                    String arrPart[] = mWordFavourite.get(i).split("::");
                    if (arrPart.length == 3) {
                        Log.i(CONTENT_TAG, "loaded content " + arrPart.length + ", wordId = " + arrPart[1]);
                        // Log.i(CONTENT_TAG, "loaded 0");
                        lstDict.add(i, arrPart[0]);
                        // Log.i(CONTENT_TAG, "loaded 1");
                        lstId.add(i, Integer.parseInt(arrPart[1]));
                        // Log.i(CONTENT_TAG, "loaded 2");
                        aptList.add(arrPart[2]);
                    } else {
                        Log.i(FAVOURITE_TAG, "Wrong entry: " + mWordFavourite.get(i));
                    }
                }
            } catch (Exception ex) {
                Log.i(FAVOURITE_TAG, "Wrong entry found!");
            }
        }
        // Log.i(CONTENT_TAG,"Adapter size = " + aptList.getCount());
        // assign result return
        mLSTFavourite.setAdapter(aptList);
        mLSTFavourite.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {
                        // mEDWord.setText(mAdapter.getItem(arg2));
                        Intent i = new Intent();
                        i.putExtra("dict", lstDict.get(arg2));
                        i.putExtra("wordId", lstId.get(arg2));
                        setResult(RESULT_OK, i);
                        finish();
                    }
                });
        btnClear.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                mWordFavourite.clear();
                aptList.clear();
                mLSTFavourite.setAdapter(aptList);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString("favourite", "");
                editor.commit();
                setResult(RESULT_OK);
                finish();
            }
        });

        btnBackToContent.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                setResult(RESULT_CANCELED);
                finish();
            }
        });
    }
}

Der Lieblingsinhalt wurde erfolgreich geladen. Die Lieblingswörter werden in der Webansicht aufgelistet. Das Problem ist jedoch, dass nur die Definition des zuletzt zum Favoriten hinzugefügten Wortes angezeigt wird, unabhängig davon, welches Wort ausgewählt wurde. Beispielsweise:

word1
word2
word3

Obwohl Wort1 und / oder Wort2 als Bedeutung ausgewählt wurden, wird immer die Definition des letzten Wortes, nämlich Wort3, angezeigt. Mein Zweck ist es, die Definition des word1Zeitpunkts der word1Auswahl und die Definition des word2Zeitpunkts der word2Auswahl usw. anzuzeigen . Ich speichere meine Wörterbuchdaten in der SQLite-Datenbank.

Kann dort jemand helfen, dieses Problem zu lösen.

Niamh Doyle
quelle
18
Ich habe den Code in Ihrer Frage ausprobiert und soweit es geht, scheint er den richtigen Wörterbuchnamen und die richtige Wort-ID aus Ihren Beispieldaten zurückzugeben, wenn einer von ihnen in der Listenansicht ausgewählt ist. Sie erwähnen eine Webansicht und eine Datenbank, die vermutlich die Daten für das ausgewählte Wort abrufen und anzeigen. Wenn einige Details dazu bereitgestellt würden, könnte mehr Hilfe geleistet werden.
StevieB
6
Welche Android-Version verwenden Sie hier? 2.3 hat Probleme mit Freigabeeinstellungen, ich habe sie selbst kennengelernt, und das klingt nach einem vertrauten Effekt.
Nebel
5
Im Titel erwähnen Sie Webview, wo ist WebView in Ihrem Code?
Zeiger Null
2
Genau wie @StevieB bereits erwähnt; Es ist etwas schwierig, präzisere Hilfe zu geben, ohne den WebView-Code zu sehen. Spontan kann ich mir vorstellen, dass WebView unter bestimmten Umständen Daten zwischenspeichert. Aber nochmal: Ich müsste wirklich sehen, wie Sie den WebView-Teil implementieren, um detailliertere Hilfe geben zu können.
DBM
2
Was für eine verrückte Frage! 8 Monate später wieder auferstanden, immer noch ohne relevanten Code und irgendwie mit einem +74? Dies ist weder gut recherchiert noch nützlicher als dieser Kommentar.
Dokkaebi

Antworten:

3

Ich denke, das Problem kommt von dieser Linie

            mWordFavourite = new ArrayList<String>(Arrays.asList(strFavourite.split(",")));

Wo erstellen Sie <string>jedes Mal ein neues ArrayList- Objekt, das Sie jedoch anhängen sollten? & hol dir den letzten, sonst solltest du ihn in eine Variable setzen

Wenn Sie überprüfen, ob seine Größe ()> 0 ist

Aber jedes Mal, wenn Sie ein neues Objekt erstellen, das nicht daran angehängt wird

Vielleicht irre ich mich!

ucefkh
quelle