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
...

アプリのリストで 5 回繰り返されます。関連するコードは次のとおりです。

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 に答える