(Android)ExpandableListView - 单击子项时将链接传递给新活动

时间:2014-03-29 18:19:39

标签: android android-intent

我创建了一个简单的音乐流应用原型,它使用ExpandableListView来显示不同的音乐类别和不同的无线电。

我遵循了可扩展列表代码的教程,它看起来像这样:

public class MainActivity extends Activity {

ExpandableListAdapter listAdapter;
ExpandableListView expListView;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //get the listview
    expListView = (ExpandableListView) findViewById(R.id.lvExp);



    // preparing list data
    prepareListData();

    listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

    // setting list adapter
    expListView.setAdapter(listAdapter);

    //Detects child item click
    expListView.setOnChildClickListener(new OnChildClickListener(){
        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {
            Toast.makeText(
                    getApplicationContext(),
                    listDataHeader.get(groupPosition)
                            + " : "
                            + listDataChild.get(
                                    listDataHeader.get(groupPosition)).get(
                                    childPosition), Toast.LENGTH_SHORT)
                    .show();
            return false;
        }

    });
    //ends OnCreate
}

/*
 * Preparing the list data
 */
private void prepareListData() {
    listDataHeader = new ArrayList<String>();
    listDataChild = new HashMap<String, List<String>>();

    // Adding child data
    listDataHeader.add("Alternative");
    listDataHeader.add("Ambient");
    listDataHeader.add("Blues");
    listDataHeader.add("Classical");
    listDataHeader.add("Hip-Hop");
    listDataHeader.add("Jazz");
    listDataHeader.add("Rock");
    listDataHeader.add("Test");

    // Adding child data
    List<String> Alternative = new ArrayList<String>();
    Alternative.add("WTH.Alternative");
    Alternative.add("This Is Corrosion");

    List<String> Ambient = new ArrayList<String>();

    List<String> Blues = new ArrayList<String>();
    Blues.add("Belly Up 4 Blues");

    List<String> Classical = new ArrayList<String>();
    List<String> HipHop = new ArrayList<String>();
    List<String> Jazz = new ArrayList<String>();

    List<String> Rock = new ArrayList<String>();
    Rock.add("SoR Radio");
    Rock.add("Megarock Radio");
    Rock.add("Aural Moon");

    List<String> Test = new ArrayList<String>();
    Test.add("Radio with Link that I know it works");
    //http://usa8-vn.mixstream.net:8138

    listDataChild.put(listDataHeader.get(0), Alternative); // Header, Child data
    listDataChild.put(listDataHeader.get(1), Ambient);
    listDataChild.put(listDataHeader.get(2), Blues);
    listDataChild.put(listDataHeader.get(3), Classical);
    listDataChild.put(listDataHeader.get(4), HipHop);
    listDataChild.put(listDataHeader.get(5), Jazz);
    listDataChild.put(listDataHeader.get(6), Rock);
    listDataChild.put(listDataHeader.get(7), Test);
}

}

我还使用了一个适配器类,它提供了渲染listview所需的方法。

我的问题是,此时,当我从Expandable列表中单击子节点时,我只是Toast一条消息。我现在要做的是,当我点击一个子节点时,我想传递一个链接,我必须以某种方式将该特定的孩子关联到另一个活动,我将从链接流式传输音乐(每个孩子都有不同的链接)相关联)。

我已经知道如何使用Android MediaPlayer从资源中流式传输,我唯一的问题是在单击列表的子节点时绑定并发送信息。

关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

您应该使用带有额外包的创建Intent来传递您想要的任何参数。然后,您可以使用startActivity方法启动它。

看看this question,有一个如何实现这一目标的例子。