I am trying to create a list of TextView’s in my Android app of name’s and organizations. However, the whole list is the same, for example:
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
...
is repeated five times in the list in the app. Here is the relevant code:
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;
}
Here is the xml view this class is working off of:
<?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>
Now, I understand that the same instance is being returned when I call “TextView tt = (TextView) v.findViewById(R.id.toptext);”, but I don’t know what to change to get a new instance object each time. What am I missing?
use your
getViewlike this