즐겨 찾는 콘텐츠가 webview에 올바르게 표시되지 않습니다.


91

언어 사전 앱을 개발 중입니다. 선호하는 단어를 Preference에 저장합니다. XML 파일의 즐겨 찾기 콘텐츠는 다음과 같습니다.

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

다음 코드를 사용하여 즐겨 찾기 콘텐츠를 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();
            }
        });
    }
}

즐겨 찾기 콘텐츠가 성공적으로로드되었습니다. 즐겨 찾는 단어가 웹보기에 나열됩니다. 그러나 문제는 어떤 단어를 선택하든 상관없이 즐겨 찾기에 추가 된 최신 단어의 정의 만 표시한다는 것입니다. 예를 들면 :

word1
word2
word3

의미로 word1 및 / 또는 word2를 선택 했음에도 불구하고 word3 인 마지막 단어의 정의가 항상 표시됩니다. 내 목적의 정의를 표시하는 것입니다 word1word1선택, 그리고 정의 word2할 때 word2선택을, 그리고에 이렇게 등등. SQLite 데이터베이스에 사전 데이터를 저장합니다.

누구든지이 문제를 해결하는 데 도움을 줄 수 있습니까?


18
귀하의 질문에 코드를 시도해 보았고 목록보기에서 그중 하나를 선택하면 샘플 데이터에서 올바른 사전 이름과 단어 ID를 반환하는 것 같습니다. Webview와 선택된 단어에 대한 데이터를 가져 와서 표시하는 데이터베이스를 언급합니다. 이러한 세부 정보가 제공되면 더 많은 도움말이 제공 될 수 있습니다.
StevieB

6
여기서 어떤 버전의 Android를 사용하고 있습니까? 2.3 공유 환경 설정에 문제가 있으며 직접 살펴 보았습니다. 이것은 익숙한 효과처럼 들립니다.
성운

5
제목에서 webview를 언급했는데 코드에서 WebView는 어디에 있습니까 ???
포인터 널

2
@StevieB가 이미 언급했듯이; WebView 관련 코드를 보지 않고 더 정확한 도움말을 제공하는 것은 약간 어렵습니다. 저절로 특정 상황에서 WebView 캐싱 데이터를 생각할 수 있습니다. 그러나 다시 한 번 더 자세한 도움말을 제공하려면 WebView 부분을 구현하는 방법을 확인해야합니다.
dbm

2
얼마나 이상한 질문입니까! 사실 이후 8 개월 만에 부활했는데 여전히 관련 코드가 게시되지 않았고 어떻게 든 +74로? 이것은 잘 조사되지 않았으며이 주석보다 더 유용하지도 않습니다.
dokkaebi

답변:


3

문제는이 라인에서 비롯된 것 같아요

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

<string>매번 새로운 ArrayList 객체 를 생성 하지만 추가해야하는 곳은 어디 입니까? & 마지막 하나를 얻지 않으면 하나의 변수에 넣어야합니다

size ()> 0인지 확인하는 경우

하지만 추가하지 않는 새 개체를 만들 때마다

내가 틀렸을 수도 있습니다!


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.