Nội dung yêu thích không được hiển thị chính xác trên webview


91

Tôi đang phát triển một ứng dụng từ điển ngôn ngữ. Tôi lưu từ yêu thích vào Preference. Nội dung yêu thích trong tệp XML trông giống như sau:

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

Tôi sử dụng mã sau để tải nội dung Yêu thích vào 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();
            }
        });
    }
}

Nội dung yêu thích đã được tải thành công. Các từ yêu thích được liệt kê trong webview. Nhưng vấn đề là nó chỉ hiển thị định nghĩa của từ mới nhất được thêm vào Yêu thích bất kể từ nào được chọn. Ví dụ:

word1
word2
word3

Mặc dù word1 và / hoặc word2 được chọn để tìm nghĩa, định nghĩa của từ cuối cùng, là word3, luôn được hiển thị. Mục đích của tôi là hiển thị định nghĩa về word1thời điểm word1được chọn và định nghĩa về word2thời điểm word2được chọn, vân vân và vân vân. Tôi lưu dữ liệu từ điển của mình trong cơ sở dữ liệu SQLite.

Ai có thể giúp đỡ để giải quyết vấn đề này.


18
Tôi đã thử mã trong câu hỏi của bạn và có vẻ như nó sẽ trả về tên từ điển và id từ chính xác từ dữ liệu mẫu của bạn khi một trong số chúng được chọn trong chế độ xem danh sách. Bạn đề cập đến Chế độ xem web và cơ sở dữ liệu, có thể lấy và hiển thị dữ liệu cho từ đã chọn, có thể được trợ giúp thêm nếu một số chi tiết của chúng được cung cấp.
StevieB

6
bạn đang sử dụng phiên bản android nào ở đây? 2.3 có vấn đề với prefs chia sẻ, tôi đã tự mình gặp chúng và điều này nghe có vẻ như hiệu ứng quen thuộc.
tinh vân

5
Trong tiêu đề bạn đề cập đến webview, WebView ở đâu trong mã của bạn ???
Pointer Null

2
Cũng giống như @StevieB đã được đề cập; hơi khó để đưa ra trợ giúp chính xác hơn nếu không thấy mã liên quan đến WebView. Một cách tự nhiên, tôi có thể nghĩ đến dữ liệu bộ nhớ đệm WebView trong một số trường hợp nhất định. Nhưng một lần nữa: Tôi thực sự cần xem cách bạn triển khai phần WebView để có thể đưa ra trợ giúp chi tiết hơn.
dbm

2
Thật là một câu hỏi kỳ lạ! Đã phục hồi 8 tháng sau khi thực tế, vẫn không có mã liên quan được đăng và bằng cách nào đó với +74? Điều này không được nghiên cứu kỹ lưỡng, cũng không hữu ích hơn nhận xét này.
dokkaebi 26/10/12

Câu trả lời:


3

Tôi nghĩ vấn đề đến từ dòng này

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

nơi bạn tạo một <string>đối tượng ArrayList mới mọi lúc nhưng bạn nên thêm vào nó? & lấy cái cuối cùng nếu không bạn nên đặt nó vào một biến

Nếu bạn đang kiểm tra xem kích thước của nó ()> 0

Nhưng mỗi khi bạn tạo một đối tượng mới không gắn với nó

Có lẽ tôi đã sai lầm!


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.