2011-09-25 86 views
0

我正在使用listview来处理项目,但我遇到了一些小问题。我使用SimpleAdapter这样我就可以改变我的ListView的看法,但它表明只有最后element.Here是代码:Android ListView只显示最后一个项目

private ArrayList <HashMap<String, Object>> items; 
    private final String TIME = ""; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.plovdiv); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
     ListView schedule = (ListView) findViewById(R.id.pld_schedule); 
     items = new ArrayList<HashMap<String,Object>>(); 

     HashMap<String, Object> hm = new HashMap<String, Object>(); 


     hm.put(TIME, "06:00"); 
     items.add(hm); 

     hm.put(TIME, "06:30"); 
     items.add(hm); 

     hm.put(TIME, "07:00"); 
     items.add(hm); 

     hm.put(TIME, "07:30"); 
     items.add(hm); 

     hm.put(TIME, "08:00"); 
     items.add(hm); 

     hm.put(TIME, "09:15"); 
     items.add(hm); 

     hm.put(TIME, "10:00"); 
     items.add(hm); 

     hm.put(TIME, "10:45"); 
     items.add(hm); 

     hm.put(TIME, "11:30"); 
     items.add(hm); 

     hm.put(TIME, "12:15"); 
     items.add(hm); 

     hm.put(TIME, "13:00"); 
     items.add(hm); 

     hm.put(TIME, "13:45"); 
     items.add(hm); 

     hm.put(TIME, "14:30"); 
     items.add(hm); 

     hm.put(TIME, "15:15"); 
     items.add(hm); 

     hm.put(TIME, "16:00"); 
     items.add(hm); 

     hm.put(TIME, "16:30"); 
     items.add(hm); 

     hm.put(TIME, "17:00"); 
     items.add(hm); 

     hm.put(TIME, "17:30"); 
     items.add(hm); 

     hm.put(TIME, "18:00"); 
     items.add(hm); 

     hm.put(TIME, "18:40"); 
     items.add(hm); 

     hm.put(TIME, "19:30"); 
     items.add(hm); 

     hm.put(TIME, "20:00"); 
     items.add(hm); 

     hm.put(TIME, "20:40"); 
     items.add(hm); 

     hm.put(TIME, "21:40"); 
     items.add(hm); 

     hm.put(TIME, "22:30"); 
     items.add(hm); 

     SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.main_listview, 
       new String[]{TIME}, new int[]{ R.id.text}); 

     schedule.setAdapter(adapter); 
     schedule.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 
    } 

这里是plovdiv.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF"> 

    <DigitalClock 
     android:id="@+id/clock" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:textSize="40dp" 
     android:textColor="#000000" 
     android:textStyle="bold" 
     android:layout_centerHorizontal="true"/> 

    <ListView 
     android:id="@+id/pld_schedule" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_below="@+id/clock" 
     android:cacheColorHint="#FFFFFF" /> 

</RelativeLayout> 

这是main_listview.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF"> 
    <TextView 
     android:id="@+id/text" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="45dp" 
     android:textColor="#000000" 
     android:textStyle="bold" 
     android:layout_alignParentLeft="true" /> 
</RelativeLayout> 

结果我得到一个列表视图,只有最后一项补充道:22:30。 任何想法如何解决这个问题?

回答

4

您保持每次添加它的时候会覆盖你的HashMap,你需要一个新的HashMap的每个条目:

{ 
    HashMap<String, Object> hm = new HashMap<String, Object>(); 
    hm.put(TIME, "06:00"); 
    items.add(hm); 
} 
{ 
    HashMap<String, Object> hm = new HashMap<String, Object>(); 
    hm.put(TIME, "06:30"); 
    items.add(hm); 
} 

1

你的时间变量是不变的,所以你的HashMap终于将在添加所有项目结束时只有1个项目。所以我建议你不断更改TIME变量,为每一个你添加的项目。

hm.put(TIME + "time1", "06:00"); 
     items.add(hm); 

     hm.put(TIME + "time2", "06:30"); 
     items.add(hm); 

使用类似上面给出的内容,您应该更改键值。

+0

我改时间缩短到只有字符串,仍然只有最后item.Actually我之前使用的代码,但在声明并没有像这样的问题。 –

+0

检查我编辑的答案。 –