2013-01-22 100 views
3

我有一個Rss源,我正在解析成列表視圖。我想要做的是當用戶第一次加載應用程序,它保存日期或類似的東西,然後只顯示列表的第一天。然後,當用戶在第二天登錄時,它會從首選項中記住該日期,並向其中添加一個日期,並在列表視圖中顯示第一天和第二天等等。另外,如果用戶幾天沒有打開該應用,則需要顯示用戶錯過的日子。例如,用戶在第一天和第二天打開應用程序並看到這些文章,然後直到第5天才打開應用程序,他們仍然需要在列表中看到第1-5天。我想我可以用Shared Preference來做所有這些,但是我沒有使用共享首選項,也沒有找到任何教程來涵蓋我在這裏要做的任何事情。我將在這裏列出我使用的代碼。如果有人願意與我一起解決這個問題,我將不勝感激。使用共享首選項來顯示列表視圖中的特定項目

XML解析活動和ListView

public class AndroidXMLParsingActivity extends ListActivity { 

// All static variables 
static final String URL = "http://www.cpcofc.org/devoapp.xml"; 
// XML node keys 
static final String KEY_ITEM = "item"; // parent node 
static final String KEY_ID = "item"; 
static final String KEY_NAME = "title"; 
static final String KEY_COST = "description"; 
static final String KEY_DESC = "description"; 
static final String KEY_GUID = "guid"; 
static final String KEY_LINK = "link"; 

ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>(); 

    XMLParser parser = new XMLParser(); 
    String xml = parser.getXmlFromUrl(URL); // getting XML 
    Document doc = parser.getDomElement(xml); // getting DOM element 

    NodeList nl = doc.getElementsByTagName(KEY_ITEM); 
    // looping through all item nodes <item> 
    for (int i = 0; i < nl.getLength(); i++) { 
     // creating new HashMap 
     HashMap<String, String> map = new HashMap<String, String>(); 
     Element e = (Element) nl.item(i); 
     // adding each child node to HashMap key => value 
     map.put(KEY_ID, parser.getValue(e, KEY_ID)); 
     map.put(KEY_NAME, parser.getValue(e, KEY_NAME)); 
     map.put(KEY_COST, parser.getValue(e, KEY_COST)); 
     map.put(KEY_DESC, parser.getValue(e, KEY_DESC)); 
     map.put(KEY_GUID, parser.getValue(e, KEY_GUID)); 
     map.put(KEY_LINK, parser.getValue(e,KEY_LINK)); 


     // adding HashList to ArrayList 
     menuItems.add(map); 
    } 

    // Adding menuItems to ListView 
    ListAdapter adapter = new SimpleAdapter(this, menuItems, 
      R.layout.list_item, 
      new String[] { KEY_DESC, KEY_NAME, KEY_COST, KEY_GUID}, new int[] { 
        R.id.desciption, R.id.name, R.id.cost}); 

    setListAdapter(adapter); 

    Collections.reverse(menuItems); 

    // selecting single ListView item 
    ListView lv = getListView(); 

    lv.setOnItemClickListener(new OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      // getting values from selected ListItem 
      String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); 
      String cost = ((TextView) view.findViewById(R.id.cost)).getText().toString(); 
      Uri uriUrl = Uri.parse(menuItems.get(position).get(KEY_GUID)); 

      // Starting new intent 
      Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); 
      in.putExtra(KEY_NAME, name); 
      in.putExtra(KEY_COST, cost); 

      // **NEED TO PASS STRING OBJECT NOT URI OBJECT** 
      in.putExtra(KEY_GUID, uriUrl.toString()); 
      startActivity(in); 

     } 
    }); 
} 
} 

這裏是什麼樣子,現在

enter image description here

回答

0

檢查SharedPreferences,http://developer.android.com/reference/android/content/SharedPreferences.html的文檔視圖,我想你需要這種情況只是簡單地將值存入SharedPreferences中,例如

public static String getPreference(Application application, String key) { 
    try { 
     SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(application); 
     return preference.getString(key, ""); 
    } catch (Exception e) { 
     return "" 
    } 
} 

public static void putPreference(Application application, String key, String value) { 
    try { 
     SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(application); 
     preference.edit().putString(key, value).commit(); 
    } catch (Exception e) { 
     Log.d("...", e.getMessage()); 
    } 
} 

操作SharedPreference很簡單,但爲了實現您的需求,您需要考慮如何設計SharedPreferences的關鍵。

一個快速的想法是,鑰匙可以形成'後20130101','後20130102',等等。在這種情況下,你可以把日期字符串鍵入,當你想要獲取rss數據一段時間,然後你可以建立相應的鍵。您可以嘗試SharedPreferences.getAll()來獲取所有數據,然後根據內存中的日期進行過濾。

但是,我認爲另一種選擇是使用sqlite數據庫。在我看來,使用sql來過濾日期列更適合這種需求。

+0

你願意把這個聊天,並幫助我通過這個工作。我真的很想了解它如何更好地工作,並閱讀了教程,但他們似乎只對我想要用戶登錄有所幫助,但對這種情況確實沒有幫助 – Bryan