Listview-Zeilen, um die änderungen zufällig auf scrollen der listview in android
Ich habe eine ListView und eine BaseAdapter.Ich bin das herunterladen von Produkten webservice und Anzeige auf listview.Es zeigt richtig auf listview.
Aber wenn ich die scroll-ListView zeigt die Zeilen in zufälliger position bedeutet manchmal auch Dritten Reihe zeigen in der ersten position, einer mittleren position Zeile Anzeige auf der letzten position und so weiter.
Dies ist mein adapter Klasse
public class ProductListAdapter extends BaseAdapter implements OnClickListener{
LayoutInflater inflater;
ArrayList<Product> arrProducts;
Context c;
public ProductListAdapter(Context c, ArrayList<Product> arrProducts) {
super();
inflater = LayoutInflater.from(c);
this.arrProducts = arrProducts;
this.c = c;
}
@Override
public int getCount() {
return arrProducts.size();
}
@Override
public Object getItem(int position) {
return arrProducts.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View v, ViewGroup parent) {
Product product = null;
if(v == null) {
v = inflater.inflate(R.layout.product_listview_row, null);
product = (Product) getItem(position);
v.setTag(product);
}else {
product = (Product)v.getTag();
}
v.setOnClickListener(this);
TextView tvProductname = (TextView)v.findViewById(R.id.tvProductname);
tvProductname.setText(product.getTitle());
String strReviewCount = product.getReviews();
TextView tvReviewsCounts = (TextView)v.findViewById(R.id.tvReviews);
if(strReviewCount != null) tvReviewsCounts.setText(strReviewCount +" Reviews");
Button btnPrice = (Button)v.findViewById(R.id.btnPrice);
btnPrice.setText(product.getSellingPrice());
return v;
}
@Override
public void onClick(View v) {
Product product = (Product) v.getTag();
Intent i = new Intent(c, ProductDetails.class);
i.putExtra(Product.PROD_ID, product.getId());
startActivity(i);
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
@Override
public int getViewTypeCount() {
return super.getViewTypeCount();
}
}
Dies ist ListView auf XML-layout
<ListView android:id="@+id/lstProducts" style="@style/fill_parent"
android:dividerHeight="1dp" android:divider="#dbd3c5"
android:scrollbars="vertical" android:layout_below="@id/layLine"></ListView>
Auch wenn ich getView()
Methode von BaseAdapter so es ist in Ordnung, die
@Override
public View getView(int position, View v, ViewGroup parent) {
Product product = null;
v = inflater.inflate(R.layout.product_listview_row, null);
product = (Product) getItem(position);
v.setTag(product);
v.setOnClickListener(this);
TextView tvProductname = (TextView)v.findViewById(R.id.tvProductname);
tvProductname.setText(product.getTitle());
String strReviewCount = product.getReviews();
TextView tvReviewsCounts = (TextView)v.findViewById(R.id.tvReviews);
if(strReviewCount != null) tvReviewsCounts.setText(strReviewCount +" Reviews");
Button btnPrice = (Button)v.findViewById(R.id.btnPrice);
btnPrice.setText(product.getSellingPrice());
return v;
}
Aber problem bei dieser Art ist, bin ich anzeigen von Bild des Produktes auf listview-Zeile, die hatte ich nicht in Betracht ziehen here.By mit dieser Art von code getView()
Methode erstellen Sie immer neue Anzeigen, Wann immer scrollen der listView so, dass ich Bild herunterladen immer wieder.Ich verwendet ImageLoader
- Klasse, die mit cash memory
für die Bilder herunterladen, aber problem ist, dass wenn ich Bild Bildansicht viele Male es mir out of memory error
.
Bitte helfen Sie mir aus diesem problem.
Dank
InformationsquelleAutor Dharmendra | 2011-09-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hier gelandet weil Sie einem link zu der Recht Lösung.
Das problem hier ist, dass Sie binden Ihr Produkt einmal, um die Ansicht, wenn Sie eine neue Ansicht erstellen. Rufen Sie diese auf jedem Aufruf der
getView
:Aber Sie nennen könnte
v.setOnClickListener(this)
sobald Sie eine Ansicht erstellen (es wird nicht sowieso ändern).Dies sollte den trick tun. Die Art der Ansicht Umsetzung ist einfach nur missbraucht hier. Ich empfehle zu Lesen meine Antwort hier...
Danke. Ich hoffe, Sie fühlen sich nicht beleidigt, das war nicht meine Absicht. Das problem hier war, dass die Menschen akzeptieren, die trick, ganz normal zu arbeiten und dann wirklich verwirrt, wenn die Dinge schief gehen später oder Sie wollen, so verwenden Sie eine Reale Ansicht Umsetzung... ich wollte einfach nur klar zu sein, statt ab Gerüchten 😉
Nein Nein, das ist gut für mich auch, die genaue Lösung. Ich persönlich denke, dass Ihre Antwort wird sicherlich arbeiten und ich werde auch versuchen es aus. Und sich schlecht zu fühlen, ist nie ein Fall, ich bin auch hier um zu lernen. Das ist schon etwas neues von Ihnen. Danke.
Auch ein sehr guter Artikel Adapter: piwai.info/android-adapter-good-practices
InformationsquelleAutor Knickedi
Deshalb, so der Empfehlungen gemacht durch Knickedi, die
getView()
Methode sollte so Aussehen:public void setTag(int key, Object tag)
Hinzugefügt wurde in API-Level 4...InformationsquelleAutor eightyfive