Android的列表视图中添加相同的项目 [英] Android Listview Adds The Same Item

查看:126
本文介绍了Android的列表视图中添加相同的项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发一个Android应用程序,我使用的是Android的ListView。我从Web服务越来越DATAS并把它们填进ArrayList中。它的尺寸为37然后我尝试填充ArrayList中的列表视图,但它总是得到相同的元素(最后一个)。下面你可以看到code部分:

 私人无效ctv_listele(字符串RES){
ArrayList的<&CTV GT; ctvList =新的ArrayList<&CTV GT;();尝试{
    的JSONObject的JSONObject =新的JSONObject(RES);
    JSONArray jsonArray = jsonObject.getJSONArray(tarife);
    INT最大= jsonArray.length();
    的for(int i = 0; I<最大;我++){
        的JSONObject TMP = jsonArray.getJSONObject(ⅰ);
        ctv.setYear(tmp.getString(年));
        ctv.setYearlyCost(tmp.getString(YearlyCost));
        ctv.setMonthlyCost(tmp.getString(MonthlyCost));
        ctv.setGroup(tmp.getString(「本集团」));
        ctv.setDegree(tmp.getString(度));
        Log.e(增加,tmp.getString(YearlyCost));
        ctvList.add(CTV);
    }
    Log.e(结束,将String.valueOf(ctvList.size()));
}赶上(JSONException E){
    // TODO自动生成catch块
    e.printStackTrace();
}
  ListView控件productList的=(的ListView)findViewById(R.id.listView_ctv);
  MyCustomAdapter适配器=新MyCustomAdapter(这一点,R.layout.ctv_row,ctvList);
  productList.setAdapter(适配器);}
公共类MyCustomAdapter扩展ArrayAdapter<&CTV GT; {私人活动范围内;
私人的ArrayList<&CTV GT;清单当然;
私人LayoutInflater layoutInflater;
私人AdapterSatir adaSatir;公共MyCustomAdapter(活动方面,诚信ctvRow,ArrayList的<&CTV GT;对象){
    超(背景下,R.layout.ctv_row,对象);
    this.context =背景;
    this.liste =物体;
    Log.e(清单当然,将String.valueOf(liste.size()));
}@覆盖
公共查看getView(INT位置,查看convertView,父母的ViewGroup){查看view_satir = convertView;
    如果(view_satir == NULL){
        adaSatir =新AdapterSatir();
        layoutInflater = context.getLayoutInflater();
        view_satir = layoutInflater.inflate(R.layout.cevretemizliktarifeleri_row,空,真);
        adaSatir.textView1 =(TextView中)view_satir.findViewById(R.id.textView_ctvlist1);
        adaSatir.textView2 =(TextView中)view_satir.findViewById(R.id.textView_ctvlist2);
        adaSatir.textView3 =(TextView中)view_satir.findViewById(R.id.textView_ctvlist3);
        adaSatir.textView4 =(TextView中)view_satir.findViewById(R.id.textView_ctvlist4);
        view_satir.setTag(adaSatir);
    }其他{
        adaSatir =(AdapterSatir)view_satir.getTag();
    }
    adaSatir.textView1.setText(liste.get(位置).getDegree());
    adaSatir.textView2.setText(liste.get(位置).getGroup());
    adaSatir.textView3.setText(liste.get(位置).getMonthlyCost());
    adaSatir.textView4.setText(liste.get(位置).getYearlyCost());
    返回view_satir;
}私有类AdapterSatir
{
    公众的TextView textView1;
    公众的TextView textView2;
    公众的TextView textView3;
    公众的TextView textView4;
}
}


解决方案

 的for(int i = 0; I<最大;我++){
        的JSONObject TMP = jsonArray.getJSONObject(ⅰ);
        ctv.setYear(tmp.getString(年));
        ctv.setYearlyCost(tmp.getString(YearlyCost));
        ctv.setMonthlyCost(tmp.getString(MonthlyCost));
        ctv.setGroup(tmp.getString(「本集团」));
        ctv.setDegree(tmp.getString(度));
        Log.e(增加,tmp.getString(YearlyCost));
        ctvList.add(CTV);
    }

您忘记在每次迭代的init你CVT对象。所以,你总是添加相同的参考到列表中。

 的for(int i = 0; I<最大;我++){
        的JSONObject TMP = jsonArray.getJSONObject(ⅰ);
        CTV = CVT无级变速器的新();
        ctv.setYear(tmp.getString(年));
        ctv.setYearlyCost(tmp.getString(YearlyCost));
        ctv.setMonthlyCost(tmp.getString(MonthlyCost));
        ctv.setGroup(tmp.getString(「本集团」));
        ctv.setDegree(tmp.getString(度));
        Log.e(增加,tmp.getString(YearlyCost));
        ctvList.add(CTV);
    }

I'm developing an Android Application and I'm using Android ListView. I'm getting datas from the web service and fill them into the Arraylist. It's size is 37. Then i try to fill the listview with Arraylist but it always get the same element(last one). Below you can see the code part:

private void ctv_listele(String res){
ArrayList<CTV> ctvList = new ArrayList<CTV>();

try {
    JSONObject jsonObject = new JSONObject(res);
    JSONArray jsonArray = jsonObject.getJSONArray("tarife");
    int max = jsonArray.length();
    for(int i = 0; i < max; i++) {
        JSONObject tmp = jsonArray.getJSONObject(i);
        ctv.setYear(tmp.getString("Year"));
        ctv.setYearlyCost(tmp.getString("YearlyCost"));
        ctv.setMonthlyCost(tmp.getString("MonthlyCost"));
        ctv.setGroup(tmp.getString("Group"));
        ctv.setDegree(tmp.getString("Degree"));
        Log.e("Added",tmp.getString("YearlyCost"));
        ctvList.add(ctv);
    }
    Log.e("End",String.valueOf(ctvList.size()));
} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
  ListView productList = (ListView) findViewById(R.id.listView_ctv);
  MyCustomAdapter adapter = new MyCustomAdapter(this, R.layout.ctv_row, ctvList);
  productList.setAdapter(adapter);

}


public class MyCustomAdapter extends ArrayAdapter<CTV>{

private Activity context;
private ArrayList<CTV> liste;
private LayoutInflater layoutInflater;
private AdapterSatir adaSatir;

public MyCustomAdapter(Activity context, int ctvRow, ArrayList<CTV> objects) {
    super(context, R.layout.ctv_row, objects);
    this.context=context;
    this.liste=objects;
    Log.e("liste",String.valueOf(liste.size()));
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

View view_satir=convertView;
    if(view_satir==null) {
        adaSatir=new AdapterSatir();
        layoutInflater=context.getLayoutInflater();
        view_satir=layoutInflater.inflate(R.layout.cevretemizliktarifeleri_row, null,true);
        adaSatir.textView1=(TextView) view_satir.findViewById(R.id.textView_ctvlist1);
        adaSatir.textView2=(TextView) view_satir.findViewById(R.id.textView_ctvlist2);
        adaSatir.textView3=(TextView) view_satir.findViewById(R.id.textView_ctvlist3);
        adaSatir.textView4=(TextView) view_satir.findViewById(R.id.textView_ctvlist4);
        view_satir.setTag(adaSatir);
    } else {
        adaSatir = (AdapterSatir) view_satir.getTag();
    }
    adaSatir.textView1.setText(liste.get(position).getDegree());
    adaSatir.textView2.setText(liste.get(position).getGroup());
    adaSatir.textView3.setText(liste.get(position).getMonthlyCost());
    adaSatir.textView4.setText(liste.get(position).getYearlyCost());
    return view_satir;
}

private class AdapterSatir
{
    public TextView textView1;
    public TextView textView2;
    public TextView textView3;
    public TextView textView4;
}
}

解决方案

for(int i = 0; i < max; i++) {
        JSONObject tmp = jsonArray.getJSONObject(i);
        ctv.setYear(tmp.getString("Year"));
        ctv.setYearlyCost(tmp.getString("YearlyCost"));
        ctv.setMonthlyCost(tmp.getString("MonthlyCost"));
        ctv.setGroup(tmp.getString("Group"));
        ctv.setDegree(tmp.getString("Degree"));
        Log.e("Added",tmp.getString("YearlyCost"));
        ctvList.add(ctv);
    }

you forget to init your cvt object at every iteration. So you add always the same reference to the list.

for(int i = 0; i < max; i++) {
        JSONObject tmp = jsonArray.getJSONObject(i);
        CTV cvt = new CVT();
        ctv.setYear(tmp.getString("Year"));
        ctv.setYearlyCost(tmp.getString("YearlyCost"));
        ctv.setMonthlyCost(tmp.getString("MonthlyCost"));
        ctv.setGroup(tmp.getString("Group"));
        ctv.setDegree(tmp.getString("Degree"));
        Log.e("Added",tmp.getString("YearlyCost"));
        ctvList.add(ctv);
    }

这篇关于Android的列表视图中添加相同的项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆