如何在Android中存储并传递ListView中所有选中项(HashMap对象项)的arrayList?

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

大家好,我是Android编程新手,需要一些帮助。我有一个由HashMap对象组成的列表视图。可以通过选中复选框来选择这些hashMap对象。(所以基本上我有一个复选框列表)。我试图做的是将ListView中选中的所有HashMap对象(或项)存储在ArrayList中。然后,我想在按下按钮时将此arrayList传递给另一个活动。我见过一些人存储字符串数据的例子,但我需要一些关于如何将listView中的“选中”HashMap对象存储到ArrayList中的帮助。最后,我想要的是一个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;
      }
@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.playlist);
//final ArrayList songsListData=新ArrayList();
SongsManager plm=新的SongsManager();
//从SD卡获取所有歌曲
this.songsList=plm.getPlayList();
TextView标签=新的TextView(此);
label.setText(“预热”);
标签尺寸(16);
标签.背景颜色(颜色.白色);
标签:setTextColor(颜色:黑色);
final ArrayList songsListData=新ArrayList();
//循环播放列表
for(HashMap hs:songsList){
如果(hs.包含值(“预热/冷却”))
songsListData.add(hs);
}
//下一个按钮
按钮btnLoadMore=新按钮(此按钮);
btnLoadMore.setText(“下一步”);
ListView lv=getListView();
lv.addHeaderView(标签);
//将“加载更多”按钮添加到底部的lisview
lv.addFooterView(btnLoadMore);
//List selectedlist=getModel(歌曲列表数据);
ArrayAdapter=新的InteractiveArrayAdapter(此,
getModel(songsListData);
setListAdapter(适配器);
//正在侦听加载更多按钮单击事件
btnLoadMore.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图arg0){
字符串priorSongs=“priorSongs”;
List selstongs=getModel(songsListData);
意图i=新意图(WarmUp.this、SlowWalking.class);
i、 普通话(长歌、自选歌曲);
星触觉(i);
}
});
lv.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//获取列表项索引
指数=位置;
//开始新的意图
Intent in=新的Intent(getApplicationContext(),
AndroidBuildingMusicLayerActivity.class);
in.putExtra(“歌曲索引”,songIndex);
星触觉(in);
完成();
}
});
}
私有列表getModel(ArrayList songsListData){
列表=新的ArrayList();
for(HashMap映射:songsListData)
for(条目:map.entrySet())
if(entry.getKey()=“songTitle”)
add(get(entry.getValue());
//首先选择其中一项
//list.get(1).setSelected(true);
退货清单;
}

您必须创建一个扩展SimpleAdapter的类适配器,以便它允许您将所有哈希映射放在列表视图中。

但是传递不起作用-它到底是如何失败的?我认为这与I.putExtra()方法有关。我试图传入一个字符串和可序列化对象。但列表并没有实现可序列化。