Android的列表视图中添加相同的项目 [英] Android Listview Adds The Same Item
本文介绍了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屋!
查看全文