0

我正在尝试在名称和组织的 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);”时会返回相同的实例,但我不知道要更改什么来获得一个新的实例对象时间。我错过了什么?

4

2 回答 2

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;
}
于 2012-07-26T04:11:51.640 回答
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,我认为这就是你所说的根本问题。

希望有帮助!

于 2012-07-26T04:00:40.743 回答