@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mileage_menu);
handler = new Handler();
m_groups = new ArrayList<Mileagelist>();
m_adapter = new MileageAdapter(MileageMenu.this,R.layout.mileage_list_detail, m_groups);
total_list.setAdapter(m_adapter);
viewGroups = new Runnable(){
@Override
public void run() {
getMailagelist();
}
};
Thread thread = new Thread(null, viewGroups, "MagentoBackground");
thread.start();
}
public class MileageAdapter extends ArrayAdapter<Mileagelist> {
private ArrayList<Mileagelist> items;
public MileageAdapter(Context context, int textViewResourceId, ArrayList<Mileagelist> items) {
super(context, textViewResourceId, items);
this.items = items;
}
public View getView(final int position, View convertView, ViewGroup parent) {
DevLog.i("MileageAdapter.getView", "position:"+position);
View v = convertView;
final Mileagelist m = items.get(position);
final ViewHolder holder;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.mileage_list_detail, null);
holder = new ViewHolder();
holder.t_date = (TextView) v.findViewById(R.id.t_mileage_date);
holder.t_dep = (TextView) v.findViewById(R.id.t_mileage_dep);
holder.t_msg = (TextView) v.findViewById(R.id.t_mileage_msg);
holder.t_total = (TextView) v.findViewById(R.id.t_mileage_total);
v.setTag(holder);
}else{
holder = (ViewHolder)v.getTag();
}
if (m != null) {
String date = m.getDate().substring(2, m.getDate().length()-3);
holder.t_date.setText(date);
if(!m.getDep().equals("")){
holder.t_dep.setText(m.getDep()+"원");
}else{
holder.t_dep.setText(m.getExp()+"원");
}
holder.t_msg.setText(m.getMsg());
holder.t_total.setText(m.getTotal()+"원");
}
return v;
}
}
private void getMailagelist(){
PhoneNumberMgr pMgr = new PhoneNumberMgr(MileageMenu.this);
String cur_phone = pMgr.phone_1+"-"+pMgr.phone_2+"-"+pMgr.phone_3;
r_groups = new ArrayList<Reclist>();
String[] key_names = new String[6];
key_names[0] = "dep";
key_names[1] = "exp";
key_names[2] = "type";
key_names[3] = "msg";
key_names[4] = "date";
key_names[5] = "total";
HashMap<String,ArrayList<String>> map = XmlParsingX.xmlParsingX(getResources().getString(R.string.custom_web_svr)
+ "select_mailage.php?phone="+cur_phone,key_names);
ArrayList<String> deps = (ArrayList<String>)map.get(key_names[0]);
ArrayList<String> exps = (ArrayList<String>)map.get(key_names[1]);
ArrayList<String> types = (ArrayList<String>)map.get(key_names[2]);
ArrayList<String> msgs = (ArrayList<String>)map.get(key_names[3]);
ArrayList<String> dates = (ArrayList<String>)map.get(key_names[4]);
ArrayList<String> totals = (ArrayList<String>)map.get(key_names[5]);
for(int i=0;i<dates.size();i++){
Mileagelist ml = new Mileagelist();
if(deps.size() >= 1 && deps.get(i)!=null){
ml.setDep(deps.get(i));
}else{
ml.setDep("");
}
if(exps.size() >= 1 && exps.get(i) != null){
ml.setExp(exps.get(i));
}else{
ml.setExp("");
}
ml.setType(types.get(i));
ml.setMsg(msgs.get(i));
ml.setDate(dates.get(i));
ml.setTotal(totals.get(i));
m_groups.add(ml);
}
runOnUiThread(returnRes3);
}
private Runnable returnRes3 = new Runnable() {
@Override
public void run() {
int leng = m_groups.size();
DevLog.i("Runnable", "mileage size : " + leng);
if(m_groups != null && leng > 0){
m_adapter.notifyDataSetChanged();
for(int i=0;i<leng;i++){
progressVal++;
m_adapter.add(m_groups.get(i));
m_ProgressDialog.setProgress(progressVal);
}
}
m_ProgressDialog.dismiss();
m_adapter.notifyDataSetChanged();
}
};
위처럼 만든어댑터를 리스트뷰에 적용하니
리스트아이템이 중복해서 출력됩니다.
m_groups 사이즈가 2인데
출력은 4개가 되는 것이죠...
그리고 getView호출은 찍어보니 3번 반복해서 출력되네요. 근데 이거랑은 상관없을 것 같아요.
부모가 wrap_content로 잡혀있으면 여러번 호출하니까요.