Favori içerik web görünümünde doğru gösterilmiyor


91

Bir dil sözlüğü uygulaması geliştiriyorum. En sevdiğim kelimeyi Preference'a kaydediyorum. XML dosyasındaki Favori içerik aşağıdaki gibi görünür:

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

Favori içeriği web görünümüne yüklemek için aşağıdaki kodu kullanıyorum:

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

Favori içerik başarıyla yüklendi. Favori sözcükler web görünümünde listelenir. Ancak sorun, hangi sözcük seçilirse seçilsin, yalnızca Sık Kullanılana eklenen en son sözcüğün tanımını göstermesidir. Örneğin:

word1
word2
word3

Anlam olarak kelime1 ve / veya kelime2 seçilmesine rağmen son kelimenin tanımı olan kelime3 her zaman gösterilir. Amacım tanımını göstermektir word1zaman word1seçilir ve tanımı word2yaparken word2seçilir ve bu kadar ve benzeri. Sözlük verilerimi SQLite veritabanına kaydediyorum.

Oradaki herhangi biri bu sorunu çözmeye yardımcı olabilir mi?


18
Sorunuzdaki kodu denedim ve gittiği kadarıyla liste görünümünde bunlardan biri seçildiğinde örnek verilerinizden doğru sözlük adını ve kelime kimliğini döndürüyor gibi görünüyor. Muhtemelen seçilen sözcük için verileri toplayan ve görüntüleyen bir Web görünümünden ve bir veritabanından bahsediyorsunuz, bunlarla ilgili bazı ayrıntılar sağlanmışsa daha fazla yardım verilebilir.
StevieB

6
burada android'in hangi sürümünü kullanıyorsunuz? 2.3 paylaşım tercihleriyle ilgili sorunlar var, ben kendim karşılaştım ve bu tanıdık bir efekt gibi geliyor.
nebulae

5
Başlıkta webview'den bahsediyorsunuz, kodunuzda WebView nerede?
Pointer Null

2
@StevieB'in daha önce bahsettiği gibi; WebView ile ilgili kodu görmeden daha kesin yardım vermek biraz zor. Spontane olarak, belirli koşullar altında WebView önbelleğe alma verilerini düşünebilirim. Ama yine de: Daha ayrıntılı yardım verebilmek için Web Görünümü bölümünü nasıl uyguladığınızı gerçekten görmem gerekiyor.
dbm

2
Ne çılgın bir soru! Olaydan 8 ay sonra yeniden dirildi, hala ilgili kod gönderilmemiş ve bir şekilde +74 ile? Bu çok iyi araştırılmamış ve bu yorumdan daha kullanışlı değil.
dokkaebi

Yanıtlar:


3

Sanırım sorun bu çizgiden geliyor

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

<string>her seferinde yeni bir ArrayList nesnesi oluşturuyorsunuz, ancak buna eklemelisiniz? & sonuncuyu al, yoksa tek bir değişkene koymalısın

Boyutunun ()> 0 olup olmadığını kontrol ediyorsanız

Ama her seferinde ona eklenmeyen yeni bir nesne oluşturduğunuzda

Belki ben hatalıyım!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.