2012-02-28 10 views
91

Zajmuję się tworzeniem aplikacji słownika językowego. Zapisz ulubione słowo w preferencjach. Ulubionym zawartość w pliku XML wygląda następująco:Ulubione treści nie są wyświetlane poprawnie na stronie internetowej

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

używam następujący kod do załadowania ulubione treści do WebView:

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(); 
      } 
     }); 
    } 
} 

ulubiony zawartość zostanie pomyślnie załadowany. Ulubione słowa są wymienione w widoku internetowym. Problem polega jednak na tym, że pokazuje tylko definicję ostatniego słowa dodanego do Ulubionego, niezależnie od wybranego słowa. Na przykład:

word1 
word2 
word3 

Pomimo wskazywanym przez zmienną WORD1 i/lub słowo2 wybrany sensu, definicja ostatniego słowa, które jest słowo3, jest zawsze widoczna. Moim celem jest wyświetlenie definicji word1 po wybraniu word1 i wybraniu definicji word2 po wybraniu word2 i tak dalej. Zapisuję dane słownika w bazie danych SQLite.

Czy ktoś może pomóc rozwiązać ten problem.

+18

Próbowałem kod w swoim pytaniu, jak dalece jak to jest wydaje się, aby powrócić poprawną nazwę słownika i słowo identyfikator z przykładowych danych, gdy jeden z są one wybierane w widoku listy. Wspomniasz o wyglądzie Web i bazie danych, która prawdopodobnie pozyskuje i wyświetla dane dla wybranego słowa, więcej pomocy można uzyskać, jeśli podano niektóre szczegóły. – StevieB

+6

jakiej wersji Androida używasz tutaj? 2.3 ma problemy z plikami share, sam do nich wpadłem, a to brzmi jak znajomy efekt. – nebulae

+5

W tytule wspominasz o webview, gdzie jest WebView w twoim kodzie? –

Odpowiedz

3

Myślę, że problem wynika z tej linii

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

gdzie utworzyć nowy ArrayList <string> obiektowi za każdym razem, ale należy dołączyć do niego? & dostać ostatni w przeciwnym razie należy go umieścić w jednej zmiennej

Jeśli sprawdzenie czy jego rozmiar()> 0

Ale za każdym razem tworzyć nowy obiekt nie dołączając do niego

Może Jestem w błędzie!

Powiązane problemy