2014-03-28 37 views
0

我嘗試使用HashMap<String, String>()來填充ListView。我應該拿取我的網站API來獲取最新的json新聞表示。現在我基本上試圖模擬動態數據並手動輸入新聞。我面臨的問題是它不會像預期的那樣添加新聞,而只是重複它們。對不起,不好的解釋。這是我的代碼澄清Android。使用HashMap的listView

public class MainActivity extends Activity { 

public final static String EXTRA_MESSAGE = "ru.rateksib.sendmessage.MESSAGE"; 

EditText editText; 
ListView newsList; 
Map<String, String> map; 
ArrayList<HashMap<String, String>> NewsArrayList; 
NewsArrayAdapter arrayAdapter; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    LayoutInflater inflater = this.getLayoutInflater(); 
    View convertView = (View) inflater.inflate(R.layout.news_dialog, null); 
    builder.setView(convertView); 
    builder.setTitle("Новости компании"); 

    // set up list view inside alertDialog 
    newsList = (ListView) convertView.findViewById(R.id.dialogNewsList); 

    // map 
    NewsArrayList = new ArrayList<HashMap<String, String>>(); 
    map = new HashMap<String, String>(); 


    map.put("title", "New branch opened!"); 
    map.put("date", "28.03.2014"); 
    NewsArrayList.add((HashMap<String, String>) map); 

    map.put("title", "Second one!"); 
    map.put("date", "28.03.2014"); 
    NewsArrayList.add((HashMap<String, String>) map); 


    // custom adapter 
    arrayAdapter = new NewsArrayAdapter(NewsArrayList, this); 
    newsList.setAdapter(arrayAdapter); 

因此,當我運行該應用程序列表填充兩次與最後一組標題和日期。

我的自定義適配器代碼是

​​

回答

0

這是因爲你加兩次map這是同一個對象的引用。在您的第一個NewsArrayList.add((HashMap<String, String>) map);之後,您將覆蓋titledate的值,這就是爲什麼您最終會得到兩次相同的值。

要解決,只是創建另一個圖是這樣的:

// map 
NewsArrayList = new ArrayList<HashMap<String, String>>(); 

map1 = new HashMap<String, String>(); 
map1 .put("title", "New branch opened!"); 
map1 .put("date", "28.03.2014"); 
NewsArrayList.add((HashMap<String, String>) map1); 

map2 = new HashMap<String, String>(); 
map2.put("title", "Second one!"); 
map2.put("date", "28.03.2014"); 
NewsArrayList.add((HashMap<String, String>) map2); 
+0

感謝您的答案,但我應該在循環中做到這一點。我怎麼去解決它? –

+0

你在循環中意味着什麼?我剛拿到你的代碼作爲例子。重點是,你想添加到列表中的每個地圖對象都必須是一個新的對象。不要重複使用相同的地圖。 –

1

我知道這是舊的文章,但我知道這個問題是問問他爲一個循環要求,只要把你的HashMap進入循環以及你會沒事的。爲你的循環n計數,計數你的變量

for(int i = 0; i< n; i++){ 
       HashMap<String, String> hashMap = new HashMap<>(); 
       map.put("title", $title); 
       map.put("date", $date); 

       classList.add(hashMap); 
      } 
相關問題