Konten favorit tidak ditampilkan dengan benar di tampilan web

91

Saya sedang mengembangkan aplikasi kamus bahasa. Saya menyimpan kata favorit ke Preferensi. Konten Favorit dalam file XML terlihat seperti berikut:

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

Saya menggunakan kode berikut untuk memuat konten Favorit ke dalam tampilan 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();
            }
        });
    }
}

Konten Favorit berhasil dimuat. Kata-kata favorit tercantum di tampilan web. Tetapi masalahnya adalah itu hanya menunjukkan definisi kata terbaru yang ditambahkan ke Favorit terlepas dari kata apa yang dipilih. Sebagai contoh:

word1
word2
word3

Meskipun kata1 dan / atau kata2 dipilih untuk artinya, definisi dari kata terakhir, yaitu kata3, selalu ditampilkan. Tujuan saya adalah untuk menampilkan definisi word1kapan word1dipilih, dan definisi word2kapan word2dipilih, dan sebagainya. Saya menyimpan data kamus saya dalam database SQLite.

Adakah yang bisa membantu memecahkan masalah ini.

Niamh Doyle
sumber
18
Saya mencoba kode dalam pertanyaan Anda dan sejauh ini tampaknya mengembalikan nama kamus dan kata id yang benar dari data sampel Anda ketika salah satunya dipilih dalam tampilan daftar. Anda menyebutkan Webview dan database, yang mungkin memperoleh dan menampilkan data untuk kata yang dipilih, bantuan lebih lanjut dapat diberikan jika beberapa detail diberikan.
StevieB
6
versi android apa yang Anda gunakan di sini? 2.3 memiliki masalah dengan prefs saham, saya mengalaminya sendiri, dan ini terdengar seperti efek yang sudah dikenal.
nebula
5
Dalam judul Anda menyebutkan webview, di mana WebView dalam kode Anda ???
Pointer Null
2
Seperti yang telah disebutkan @StevieB; agak sulit untuk memberikan bantuan yang lebih tepat tanpa melihat kode terkait WebView. Secara spontan saya dapat memikirkan data cache WebView dalam keadaan tertentu. Tetapi sekali lagi: Saya benar-benar perlu melihat bagaimana Anda mengimplementasikan bagian WebView agar dapat memberikan bantuan yang lebih detail.
dbm
2
Sungguh pertanyaan yang lucu! Dibangkitkan 8 bulan setelah fakta, masih tanpa kode yang relevan diposting, dan entah bagaimana dengan +74? Ini tidak diteliti dengan baik, juga tidak ada yang lebih berguna dari komentar ini.
dokkaebi

Jawaban:

3

Saya pikir masalahnya berasal dari baris ini

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

di mana Anda membuat <string>objek ArrayList baru setiap kali tetapi Anda harus menambahkannya? & dapatkan yang terakhir jika tidak, Anda harus memasukkannya ke dalam satu variabel

Jika Anda memeriksa apakah ukurannya ()> 0

Tetapi setiap kali Anda membuat objek baru tidak menambahkannya

Mungkin saya salah!

ucefkh
sumber