CustiomAdapter를 이용하여 ListView에 값을 뿌렸는데,
맨 마지막에 입력된 객체의 정보만 반복해서 나옵니다.
예를 들면
1 A
2 B
3 C
4 D
이렇게 네개의 객체를 ArrayList에 입력했으면
ListView에는
4 D
4 D
4 D
4 D
로 나옵니다.
입력한 갯수는 맞는데, 마지막 값만 반복되는 데 어디의 문제인지를 모르겠습니다.
몇시간째 이부분에서 막히고 있습니다. 도와주세요.
package project.forReader.purpose;
import java.util.ArrayList;
import project.forReader.main.R;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Toast;
public class PurposeAdapter extends ArrayAdapter<Purpose>{
private ArrayList<Purpose> items;
private Context context;
private final int READING_AMOUNT = 11;
private final int READING_HABIT = 12;
public PurposeAdapter(Context context, int textViewResourceId,
ArrayList<Purpose> objects) {
super(context, textViewResourceId, objects);
// TODO Auto-generated constructor stub
this.items = objects;
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
if(v==null){
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.purpose_item, null);
}
Purpose p = items.get(position);
if(p!=null){
TextView purp = (TextView)v.findViewById(R.id.purpose);
TextView achi = (TextView)v.findViewById(R.id.achieve);
if(purp != null){
if(p.getType() == READING_AMOUNT){
String txt = p.getPeriod() + "일 동안 " + p.getAmount() + "권 읽기";
purp.setText(txt);
}
else if(p.getType() == READING_HABIT){
String txt = "매일 " + p.getAmount() + "분씩 독서하기";
purp.setText(txt);
}
}
if(achi != null){
if(p.getType() == READING_AMOUNT){
//achi.setText(p.getAchieve());
achi.setText("0%");
}
else if(p.getType() == READING_HABIT){
//achi.setText(p.getAchieve());
achi.setText("0%");
}
}
}
return v;
}
}
아래는 ListView와 Adapter를 연결하는 소스 부분입니다.
pList = new ArrayList<Purpose>(); getPurposeList(this); ListView view = (ListView)findViewById(R.id.pur_list); PurposeAdapter adpt = new PurposeAdapter(AllView.this, R.layout.purpose_item, pList); view.setAdapter(adpt);




convertView 가 처음에는 null 이지만,
이 후 부터는 null이 아닙니다.
때문에 리스트 뷰 처음에 생성되는 View 인스턴스를 동일하게 마지막 데이터까지 사용하면서,
마지막 데이터만 모두 표시되게 되는 것으로 보여집니다. ^^a
간단하게는, view 인스턴스를 항상 새로 생성하도록 (convertView 를 무시하고) 수정하시던가,
ViewHolder(검색) 방식을 사용하시던가 하면 해결될 듯 합니다.