2012-07-26 54 views
0

我想在我的名稱和組織的Android應用程序中創建TextView的列表。但是,整個列表是相同的,例如:在Android中創建TextView的列表

Joe's work for Construction Co. 
15hrs of 60hrs 
Joe's work for Construction Co. 
15hrs of 60hrs 
Joe's work for Construction Co. 
15hrs of 60hrs 
... 

在應用程序的列表中重複五次。下面是相關代碼:

class IconicAdapter extends ArrayAdapter<Long> { 
private ArrayList<Long> items; 
private FakeIDO ido; 

public IconicAdapter(Context context,int textViewResourceId, ArrayList<Long> ids, FakeIDO ido){ 
    super(WorkList.this, R.layout.feed_list, ids); 
    this.items = ids; 
    this.ido = ido; 
} 


public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.row, null); 
    } 
    for(long id : items){ 
     TextView tt = (TextView) v.findViewById(R.id.toptext); 
     TextView bt = (TextView) v.findViewById(R.id.bottomtext); 
     if (tt != null) { 
       tt.setText(ido.getName(id) + "'s work for " + ido.getOrganization(id)); 
     } 
     if(bt != null){ 
       bt.setText(ido.totalWorked(id) + "hrs of " + ido.estimatedHours(id) + "hrs"); 
     } 
    } 
    return v; 
} 

這裏是XML視圖這個類是工作過的:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="?android:attr/listPreferredItemHeight" 
android:padding="6dip"> 
<ImageView 
    android:id="@+id/icon" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_marginRight="6dip" 
    android:src="@drawable/icon" /> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="0dip" 
    android:layout_weight="1" 
    android:layout_height="fill_parent"> 
    <TextView 
     android:id="@+id/toptext" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:gravity="center_vertical" 
    /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:id="@+id/bottomtext" 
     android:singleLine="true" 
     android:ellipsize="marquee" 
    /> 
</LinearLayout> 

現在,我明白,當我打電話相同的實例被返回「TextView tt =(TextView)v.findViewById(R.id.toptext);」,但我不知道每次要更改哪個新實例對象才能更改。我錯過了什麼?

+0

'getView()'爲每個單獨的列表項調用一次,而你是通過你的整個'items' ArrayList的每一次迭代。我假設'喬'是列表中的最後一項,所以他的信息顯示在每個列表項上。您應該只在每個'getView()'調用中設置文本視圖的文本。 – theisenp 2012-07-26 03:59:50

+0

只是刪除你的'for循環'。 – 2012-07-26 04:10:20

回答

1

使用getView這樣

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.row, null); 
    } 

     TextView tt = (TextView) v.findViewById(R.id.toptext); 
     TextView bt = (TextView) v.findViewById(R.id.bottomtext); 
     // get the 'id' for position. 
     int id = items.get(position); 
     if (tt != null) { 
       tt.setText(ido.getName(id) + "'s work for " + ido.getOrganization(id)); 
     } 
     if(bt != null){ 
       bt.setText(ido.totalWorked(id) + "hrs of " + ido.estimatedHours(id) + "hrs"); 
     } 

    return v; 
} 
+0

是啊,看起來我誤解了getView函數是如何被Android調用的。 – kurtzbot 2012-07-26 15:48:32

0

我會嘗試改變

TextView tt = (TextView) v.findViewById(R.id.toptext); 

TextView tt = new TextView(this); 
CharSequence text = ((TextView)v.findViewById(R.id.toptext)).getText(); 
tt.setText(text); 

這將實例化一個新的TextView具有相同的內容,我認爲這是你在說什麼根本的問題是。

希望有幫助!

相關問題