2012-02-28 9 views
91

पर सही ढंग से नहीं दिखाया गया है, मैं एक भाषा शब्दकोश ऐप विकसित कर रहा हूं। मैं पसंदीदा शब्द को प्राथमिकता में सहेजता हूं। एक्सएमएल फ़ाइल में पसंदीदा सामग्री ऐसा दिखाई देता है:पसंदीदा सामग्री को वेबदृश्य

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

पसंदीदा सामग्री को सफलतापूर्वक लोड किया जाता है:

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

मैं वेबव्यू में पसंदीदा सामग्री लोड करने के निम्नलिखित कोड का उपयोग करें। पसंदीदा शब्द वेबव्यू में सूचीबद्ध हैं। लेकिन समस्या यह है कि यह केवल पसंदीदा शब्द में परिभाषित नवीनतम शब्द की परिभाषा को दिखाता है, चाहे वह शब्द किस प्रकार चुना गया हो। उदाहरण के लिए:

word1 
word2 
word3 

word1 और/या WORD2 बावजूद अर्थ के लिए चुना जाता है, पिछले शब्द की परिभाषा है, जो word3 है, हमेशा दिखाया जाएगा। मेरा उद्देश्य word1 की परिभाषा को प्रदर्शित करना है जब word1 चुना गया है, और word2 की परिभाषा word2 चयनित है, और इसी तरह आगे और आगे। मैं SQLite डेटाबेस में अपना शब्दकोश डेटा सहेजता हूं।

क्या कोई इस समस्या को हल करने में मदद कर सकता है।

+18

मैं अपने प्रश्न में कोड की कोशिश की और जहाँ तक यह जाता है तो आपका नमूना डेटा से सही शब्दकोश नाम और शब्द आईडी वापस जाने के लिए में से एक रहा है के लिए ऊपर दिया गया लिंक देखें उन्हें सूचीदृश्य में चुना गया है। आप एक वेबव्यू और डेटाबेस का उल्लेख करते हैं, जो संभवतः चयनित शब्द के लिए डेटा प्राप्त और प्रदर्शित करता है, यदि इनमें से कुछ विवरण प्रदान किए गए थे तो अधिक सहायता दी जा सकती है। – StevieB

+6

एंड्रॉइड का कौन सा संस्करण आप यहां उपयोग कर रहे हैं? 2.3 में शेयर प्रीफ़्स के साथ समस्याएं हैं, मैंने स्वयं में भाग लिया है, और यह परिचित प्रभाव की तरह लगता है। – nebulae

+5

शीर्षक में आप वेबदृश्य का उल्लेख करते हैं, आपके कोड में WebView कहां है ??? –

उत्तर

3

मुझे लगता है कि समस्या इस लाइन

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

से आता है जहाँ आप एक नया ArrayList <string> वस्तु हर बार बनाने लेकिन आप इसे करने के लिए संलग्न करना चाहिए? & मिल पिछले एक अन्यथा आप में रख चाहिए एक चर

आप की जाँच कर रहे हैं, तो इसके आकार()> 0

लेकिन हर बार आपके द्वारा बनाए गए एक नई वस्तु इसे करने के लिए जोड़कर

शायद नहीं मैं गलत हूँ!

2
+0

स्टैक ओवरफ्लो में आपका स्वागत है! क्या आप लेख के एक अंश को अपने उत्तर में जोड़ना चाहते हैं, ताकि यह स्वयं पर खड़ा हो सके? –

संबंधित मुद्दे