Ich habe eine CustomGrid
für einen Produktkatalog. Die Daten für das Grid sind lokal gespeichert. Der Text stammt aus einer lokalen JSON-Datei und die Bilder werden auch unter res
gespeichert.Android - Gridview verhält sich verrückt
Während die GridView angezeigt wird, sind die 300 Elemente nicht richtig angeordnet. Sie wiederholen sich nach 20 Einträgen und sie mischen sich, wenn ich nach oben und unten scrolle.
Ich debuggte die Datenfelder, aber sie sehen gut aus. Ich habe jetzt auch den gleichen Bildpfad für jeden Gegenstand. So hat jedes Gridview-Objekt das gleiche Bild. Aber das ist kein unterschiedliches Verhalten der GridView.
Ich habe keine Probleme auf anderen Gridviews mit viel weniger Elemente. Ich lese über Lazy Loading, aber ich lade die Bilddateien nicht
Warum verhält sich das Grid so? Ist das zu viel Überlastung auf einmal? Wie kann ich dieses Problem lösen?
EDIT:
CustomGrid:
public class CustomGrid extends BaseAdapter{
private Context mContext;
private final String[] gridItemText;
private final int[] imageID;
public CustomGrid(Context c, String[] gridItemText, int[] imageID){
mContext = c;
this.gridItemText = gridItemText;
this.imageID = imageID;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return gridItemText.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View grid;
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
//grid = new View(mContext);
grid = inflater.inflate(R.layout.grid_single_main, null);
TextView textView = (TextView) grid.findViewById(R.id.grid_single_text);
ImageView imageView = (ImageView)grid.findViewById(R.id.grid_single_image);
textView.setText(gridItemText[position]);
imageView.setImageResource(imageID[position]);
} else {
grid = (View) convertView;
}
return grid;
}
}
Aktivität:
CustomGrid adapter = new CustomGrid(ProductCatalogActivity.this, menuData, imagePath);
gridView1=(GridView)findViewById(R.id.grid_Main);
gridView1.setAdapter(adapter);
gridView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
//ToDo
}
});
Können Sie bitte einen Code hinzufügen – raktale
Ich habe den entsprechenden Code hinzugefügt – Mike