Je développe une application de dictionnaire de langue. J'enregistre le mot préféré dans Préférence. Le contenu favori du fichier XML ressemble à ce qui suit:
<?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>
J'utilise le code suivant pour charger le contenu favori dans la vue Web:
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();
}
});
}
}
Le contenu favori est chargé avec succès. Les mots préférés sont répertoriés dans la vue Web. Mais le problème est qu'il ne montre que la définition du dernier mot ajouté au favori quel que soit le mot choisi. Par exemple:
word1
word2
word3
Bien que mot1 et / ou mot2 soit sélectionné pour la signification, la définition du dernier mot, qui est mot3, est toujours affichée. Mon but est d'afficher la définition de word1
quand word1
est sélectionné, et la définition de word2
quand word2
est sélectionné, et ainsi de suite. J'enregistre mes données de dictionnaire dans la base de données SQLite.
Quelqu'un peut-il aider à résoudre ce problème.