2013-12-09 3 views
1

Я хочу получить выбранную строку из первой хэш-карты и отобразить ее в другой хэш-карте. И я успешно получаю значение из первого hashmap и отображаю его во второй hashmap. Теперь проблема заключается в том, как я могу отобразить значение по одному, которое выбрано из первого хэш-карты, потому что в настоящее время я могу отображать только одно значение во второй хэш-карте. И я провел много исследований, добавив набор записей или notifyDataSetChanged, но все еще не работая. Поправьте меня если я ошибаюсь. Пожалуйста помоги! Благодаря!Отображать несколько значений в хэшмапах по одному

Это мой код. LISTMENU - это первый hashmap, а LISTORDER - второй hashmap. LISTORDER может получить значение из clicktener из LISTMENU.

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

      HashMap<String, String> map = LIST2.get(position); 

      itemValue = map.get(FOODNAME2); 
      itemID = map.get(FOODID2); 

      Toast.makeText(getApplicationContext(), 
        "Food ID : " + itemID + "ListItem : " + itemValue , Toast.LENGTH_LONG) 
        .show(); 

      listOrder(itemValue, itemID); 
     } 
    }); 
} 

private void listOrder(String itemValue, String itemID) 
{ 
    ArrayList<HashMap<String, String>> LIST3 = new ArrayList<HashMap<String, String>>(); 

    HashMap<String, String> map = new HashMap<String, String>(); 

    map.put(FOODID3, itemID); 
    map.put(FOODNAME3, itemValue); 


    /*for (Map.Entry<String, String> entry : map.entrySet()) 
    { 
     String key = entry.getKey(); 
     String value = entry.getValue(); 
    }*/ 

    LIST3.add(map); 

    LISTORDER = (ListView) findViewById(R.id.listOrder); 

    List3Adapter adapter = new List3Adapter(MainActivity.this, LIST3); 
    LISTORDER.setAdapter(adapter); 

    /*adapter.setNotifyOnChange(true); 
    adapter.addAll(map); 
    adapter.notifyDataSetChanged();*/ 

} 

ответ

1

Я думаю, проблема в том, что вы создаете новые экземпляры ArrayList каждый раз. Объявите ArrayList LIST3 как глобальную переменную, а затем в методе onCreate инициализируйте его доступ к нему в методе listOrder, не создавая новый экземпляр ArrayList, как приведенный ниже фрагмент кода. Надеюсь, это сработает.

ArrayList<HashMap<String, String>> LIST3; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    LIST3 = new ArrayList<HashMap<String, String>>(); 

} 

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

     HashMap<String, String> map = LIST2.get(position); 

     itemValue = map.get(FOODNAME2); 
     itemID = map.get(FOODID2); 

     Toast.makeText(getApplicationContext(), 
       "Food ID : " + itemID + "ListItem : " + itemValue , Toast.LENGTH_LONG) 
       .show(); 

     listOrder(itemValue, itemID); 
    } 
}); 

}

private void listOrder(String itemValue, String itemID) 

{

HashMap<String, String> map = new HashMap<String, String>(); 

map.put(FOODID3, itemID); 
map.put(FOODNAME3, itemValue); 


/*for (Map.Entry<String, String> entry : map.entrySet()) 
{ 
    String key = entry.getKey(); 
    String value = entry.getValue(); 
}*/ 

LIST3.add(map); 

LISTORDER = (ListView) findViewById(R.id.listOrder); 

List3Adapter adapter = new List3Adapter(MainActivity.this, LIST3); 
LISTORDER.setAdapter(adapter); 

/*adapter.setNotifyOnChange(true); 
adapter.addAll(map); 
adapter.notifyDataSetChanged();*/ 

}

+0

Спасибо! работает! Могу ли я задать еще один вопрос? Можно ли получить всю ценность от LIST3 и putExtra к другому действию? – user3040029

+1

Проверьте это [ответ] (http://stackoverflow.com/questions/17718442/pass-the-arraylist-from-one-activity-to-another). Надеюсь, это ответит на ваш запрос. –

+0

Ты такой хороший приятель. Благодаря! – user3040029

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