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 word1
Zeitpunkts der word1
Auswahl und die Definition des word2
Zeitpunkts der word2
Auswahl usw. anzuzeigen . Ich speichere meine Wörterbuchdaten in der SQLite-Datenbank.
Kann dort jemand helfen, dieses Problem zu lösen.
Antworten:
Ich denke, das Problem kommt von dieser Linie
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 setzenWenn 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!
quelle
http://developer.android.com/reference/android/webkit/WebView.html
Weitere Informationen finden Sie über den obigen Link
quelle