如何存储,然后从Android的ListView中传递所有检查项目(HashMap对象项目)的arrayList?

问题描述:

嗨,大家好,我是Android编程新手,需要一些帮助。我有一个由HashMap对象组成的列表视图。可以通过选中一个复选框来选择这些hashMap对象。 (所以基本上我有一个复选框列表)。我想要做的是将在ListView中检查的所有HashMap对象(或项目)存储在ArrayList中。然后我想在按下按钮时将此数组列表传递给另一个活动。我见过一些存储字符串数据的人的例子,但是我需要一些关于如何将listView中的“checked”HashMap对象存储到ArrayList中的帮助。所以最后我想要的是一个ArrayList,它由在列表中检查过的对象(项目)组成,然后我可以通过。如何存储,然后从Android的ListView中传递所有检查项目(HashMap对象项目)的arrayList?

程序的目标是:允许用户根据类别选择歌曲并创建自己的自定义播放列表。用户将会看到一个类别的歌曲,他们将从该类别中选择他们想要的歌曲,然后按下“下一步”按钮,这会将他们发送到一个新的活动,在那里他们将呈现一个新的歌曲类别。在每个类别中,我试图存储他们的选择,并将其从活动(类别)传递给活动(类别)。但传球不起作用。我可以做一些事情。需要一些建议什么或如何做。 - 谢谢

一些代码:不是我知道的最有组织的。新到Android所以任何指针或东西,我应该改变

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

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

    SongsManager plm = new SongsManager(); 
    // get all songs from sdcard 
    this.songsList = plm.getPlayList(); 
    TextView label = new TextView(this); 
    label.setText("Warm-up"); 
    label.setTextSize(16); 
    label.setBackgroundColor(Color.WHITE); 
    label.setTextColor(Color.BLACK); 

    final ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>(); 
    // looping through playlist 
    for(HashMap hs: songsList){ 
    if(hs.containsValue("Warm-up/cool down")) 
    songsListData.add(hs); 
    } 

    // NEXT button 
    Button btnLoadMore = new Button(this); 
    btnLoadMore.setText("Next"); 
    ListView lv = getListView(); 
    lv.addHeaderView(label); 

// Adding Load More button to lisview at bottom 
     lv.addFooterView(btnLoadMore); 

    //List<Model> selectedlist = getModel(songsListData); 
    ArrayAdapter<Model> adapter = new InteractiveArrayAdapter(this, 
     getModel(songsListData)); 

    setListAdapter(adapter); 

    //Listening to Load More button click event 

    btnLoadMore.setOnClickListener(new View.OnClickListener() { 
    @Override 
public void onClick(View arg0) { 
     String priorSongs = "priorSongs"; 
     List<Model> selSongs = getModel(songsListData); 
     Intent i = new Intent(WarmUp.this, SlowWalking.class); 
     i.putExtra(priorSongs, selSongs); 
     startActivity(i); 
} 
}); 

    lv.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

    // getting listitem index 
    int songIndex = position; 

    // Starting new intent 
    Intent in = new Intent(getApplicationContext(), 
         AndroidBuildingMusicPlayerActivity.class); 
    in.putExtra("songIndex", songIndex); 
    startActivity(in); 
    finish(); 
      } 
     }); 

    } 
    private List<Model> getModel(ArrayList<HashMap<String, String>> songsListData) { 
     List<Model> list = new ArrayList<Model>(); 
     for (HashMap<String, String> map : songsListData) 
      for (Entry<String, String> entry : map.entrySet()) 
       if (entry.getKey() == "songTitle") 
        list.add(get(entry.getValue())); 

     // Initially select one of the items 
     //list.get(1).setSelected(true); 
     return list; 
     } 
+0

*但传球不起作用* - 它究竟如何失败? – Luksprog 2013-03-20 13:06:22

+0

我认为它与i.putExtra()方法有关。我试图传入一个字符串和Serializable对象。但是List没有实现Serializable。 – user1899872 2013-03-20 14:05:37

您必须创建一个延伸的SimpleAdapter所以它可以让你把你所有的哈希映射在你的列表视图类适配器。