2016-09-07 3 views
-5

Я хочу передать данные из одной активности Listview в следующую операцию, то есть когда элемент щелкнул в списке, данные, такие как заголовок или thumb_url (изображение из удаленной базы данных), могут быть переданы в подробное действие.Как получить данные из HashMap для перехода к следующей операции?

В приведенном ниже примере эти элементы указаны в HashMap.

Какой код передает вышеуказанные данные в другую деятельность, используя намерение?

Я озадачен тем, что эти элементы данных размещены в 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) { 
} 
+1

См. Этот http://stackoverflow.com/questions/2091465/how-do-i-pass-data-between-activities-on-android –

+0

Это проще, чем вы ожидаете. Просто сделайте обратное тому, что вы делали до 'songsList.add (map);'. – Sufian

+0

Ваш вопрос был неясным, возможно, потому, что вы не нарушили его до более разрешимой задачи. Передача его в действие происходит после того, как вы получили объект. Кроме того, вы должны использовать [POJO] (http://stackoverflow.com/questions/3527264/how-to-create-a-pojo), чтобы избежать беспорядочного кода в будущем. – Sufian

ответ

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")); 
} 
+0

спасибо. Не уверен, что это будет извлекать значения во втором действии, хотя - «ключ» немного туманный. – JohnFerg

1

Попробуйте так: Позовите HashMap определенного положения из списка а затем введите значения с помощью клавиш.

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: ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>(); глобально.

+0

Спасибо за это! Я попробую это позже. Это похоже на то, что я ищу! – JohnFerg

+0

Хорошо, попробуйте, и если это сработает, не забудьте принять ответ. Хорошее кодирование :) – kgandroid

+0

О, только один вопрос - что мне нужно определить re: Hashmap JohnFerg

Смежные вопросы