2012-02-28 118 views
91

我正在开发一个语言字典应用程序。我将喜欢的单词保存到首选项中。 XML文件中的喜好内容如下所示:收藏的内容在webview上无法正确显示

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

我用下面的代码加载喜欢的内容进入网页视图:

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

喜好内容加载成功。最喜欢的单词在webview中列出。但问题在于它只显示添加到收藏夹的最新单词的定义,而不管选择了什么单词。例如:

word1 
word2 
word3 

尽管WORD1和/或单词2被选择用于意义,最后一个字的定义,这是WORD3,总是显示。我的目的是当选择word1时显示word1的定义,并且当选择word2时定义word2,依此类推。我将我的字典数据保存在SQLite数据库中。

有没有人可以帮助解决这个问题。

+18

我试过的代码在你的问题,并尽可能地去它似乎从你的样本数据时返回正确的字典名称和词ID的一个他们在列表视图中被选中。你提到一个Webview和一个数据库,它可能会获得并显示所选单词的数据,如果提供了这些数据的某些细节,可以给予更多的帮助。 – StevieB 2012-03-06 16:58:41

+6

你在这里使用的是什么版本的android? 2.3与股票首选项有问题,我自己碰到它们,这听起来像是熟悉的效果。 – nebulae 2012-09-26 15:12:24

+5

标题中提到了webview,代码中的WebView在哪里? – 2012-10-22 04:48:00

回答

3

我认为问题来源于此行

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

,你创建一个新的ArrayList <string>对象每次但你应该追加到它? &得到最后一个,否则你应该把它放在一个变量

如果要检查,如果它的大小()> 0

但每次创建时一个新的对象不追加到它

也许我错了!