【问题标题】:How do I get data from HashMap to pass to next Activity?如何从 HashMap 获取数据以传递给下一个 Activity?
【发布时间】:2017-01-15 02:29:39
【问题描述】:

我希望将数据从一个Listview 活动传递到下一个活动,即当单击列表中的项目时,可以将标题或thumb_url(来自远程数据库的图像)等数据传递给详细活动。

在下面的示例中,这些项目在HashMap 中列出。

什么代码会使用 Intent 将上述数据传递给另一个活动?

我很困惑,因为这些数据项是在HashMap 中布置的。

public class CustomizedListView extends Activity {
    // All static variables
    static final String URL = "http://padihamcars.com/music.xml";
    // XML node keys
    static final String KEY_SONG = "song"; // parent node
    static final String KEY_ID = "id";
    static final String KEY_TITLE = "title";
    static final String KEY_ARTIST = "artist";
    static final String KEY_DURATION = "duration";
    static final String KEY_THUMB_URL = "thumb_url";

    ListView list;
    LazyAdapter adapter;

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

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

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

        NodeList nl = doc.getElementsByTagName(KEY_SONG);
        // looping through all song nodes <song>
        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_TITLE, parser.getValue(e, KEY_TITLE));
            map.put(KEY_ARTIST, parser.getValue(e, KEY_ARTIST));
            map.put(KEY_DURATION, parser.getValue(e, KEY_DURATION));
            map.put(KEY_THUMB_URL, parser.getValue(e, KEY_THUMB_URL));

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

        list=(ListView)findViewById(R.id.list);

        // Getting adapter by passing xml data ArrayList
        adapter=new LazyAdapter(this, songsList);        
        list.setAdapter(adapter);

        // Click event for single list row
        list.setOnItemClickListener(new OnItemClickListener() {

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

【问题讨论】:

标签: android listview android-intent hashmap


【解决方案1】:

试试这个:-

 list.setOnItemClickListener(new OnItemClickListener() {

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

                        HashMap<String, String> map  = songsList.get(position);
                        Intent intent = new Intent(YourActivity.this, MyOtherActivity.class);
                        intent.putExtra("map", map);
                        startActivity(intent);

                }

比在接收活动中:

protected void onCreate(Bundle bundle) {
    super.onCreate(savedInstanceState);

    Intent intent = getIntent();
    HashMap<String, String> hashMap = (HashMap<String, String>)intent.getSerializableExtra("map");
    Log.v("HashMapTest", hashMap.get("key"));
}

【讨论】:

  • 谢谢。不确定这是否会检索第二个活动中的值 - “key”有点模糊..
【解决方案2】:

试试这个方法:从列表中获取特定位置的哈希图,然后使用键获取值。

list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
    HashMap<String, String> resultp = new HashMap<String, String>();
    resultp   = songsList.get(position);
    String s_id=resultp.get(KEY_ID);
    String s_title=resultp.get(KEY_TITLE);
    Intent intent = new Intent(YourActivity.this, MyOtherActivity.class);
    intent.putExtra("s_id", s_id);
    intent.putExtra("s_title", s_title);
    //other fields you want to send
    startActivity(intent);
}

全局定义数组列表:ArrayList&lt;HashMap&lt;String, String&gt;&gt; songsList = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();

【讨论】:

  • 谢谢!我稍后会尝试。这看起来像我要找的东西!
  • 好的,试试看,如果它有效,那么别忘了接受答案。快乐编码:)
  • 哦,只有一个问题 - 我需要在第二个活动中定义什么 re:Hashmap
  • 你不需要在你的 secondactivity 中再次定义 hashmap。你直接获取字符串值
  • 啊-谢谢!今天要实施——昨天太忙了!
猜你喜欢
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 2017-04-05
  • 2015-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多