2012-02-28 20 views
91

Estoy desarrollando una aplicación de diccionario de idiomas. Guardo la palabra favorita en Preferencia. El contenido favorito en el archivo XML tiene el siguiente aspecto:El contenido favorito no se muestra correctamente en webview

<?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> 

que utilizar 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 ha cargado correctamente. Las palabras favoritas se enumeran en la vista web. Pero el problema es que solo muestra la definición de la última palabra añadida al Favorito, independientemente de la palabra elegida. Por ejemplo:

word1 
word2 
word3 

pesar word1 y/o word2 se selecciona de sentido, siempre se muestra la definición de la última palabra, que es word3,. Mi propósito es mostrar la definición de word1 cuando se selecciona word1, y se selecciona la definición de word2 cuando word2, y así sucesivamente. Guardo mis datos de diccionario en la base de datos SQLite.

¿Alguien puede ayudar a resolver este problema?

+18

que probé el código en su pregunta y en lo que va Parece que devolver el nombre y la palabra del diccionario correcta identificación de los datos de la muestra cuando uno de ellos se seleccionan en la vista de lista. Menciona una vista web y una base de datos, que presumiblemente obtienen y muestran los datos de la palabra seleccionada, se podría brindar más ayuda si se proporcionan algunos detalles de estos. – StevieB

+6

¿qué versión de Android estás usando aquí? 2.3 tiene problemas con los recursos compartidos, me he topado con ellos, y esto suena como un efecto familiar. – nebulae

+5

En el título mencionas la vista web, ¿dónde está WebView en tu código? –

Respuesta

3

Creo que el problema viene de esta línea

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

donde se crea un nuevo objeto ArrayList <string> cada vez pero se debe agregar a ella? & obtener la última de lo contrario debe ponerlo en una variable

Si se está comprobando si su tamaño()> 0

Pero cada vez que se crea un nuevo objeto no añadiendo a ella

Tal vez ¡Estoy equivocado!

Cuestiones relacionadas