Estoy desarrollando una aplicación de diccionario de idiomas. Guardo la palabra favorita en Preferencia. El contenido favorito del archivo XML tiene el siguiente aspecto:
<?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>
Utilizo el siguiente código para cargar el contenido favorito en la vista 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();
}
});
}
}
El contenido favorito se cargó correctamente. Las palabras favoritas se enumeran en la vista web. Pero el problema es que solo muestra la definición de la última palabra agregada al Favorito, independientemente de la palabra elegida. Por ejemplo:
word1
word2
word3
A pesar de que se selecciona palabra1 y / o palabra2 por su significado, siempre se muestra la definición de la última palabra, que es palabra3. Mi propósito es mostrar la definición de word1
cuándo word1
se selecciona y la definición de word2
cuándo word2
se selecciona, y así sucesivamente. Guardo los datos de mi diccionario en la base de datos SQLite.
¿Alguien puede ayudar a resolver este problema?
Respuestas:
Creo que el problema viene de esta linea
donde crea un nuevo
<string>
objeto ArrayList cada vez, pero debe agregarlo? y obtén el último, de lo contrario deberías ponerlo en una variableSi está comprobando si su tamaño ()> 0
Pero cada vez que crea un nuevo objeto que no se le agrega
¡Tal vez yo estoy equivocado!
fuente
http://developer.android.com/reference/android/webkit/WebView.html
Consulte el enlace anterior para obtener más información.
fuente