Hallo Forum,
ich verzweifel gerade daran in einem GridView Bilder die von einer URL kommen anzuzeigen.
Irgendwie sieht mir das nach einemTimingproblem aus, weil das erste Bild im Gridview schonmal geladen wird.
Achso, um die Bilder zu laden Benutzer ich folgende Klassen: http://www.androidhive.info/20…ding-image-from-url-http/
Hier der Quelltext zum Thread der die Bilder lädt:
private class LoadImagesAsync extends AsyncTask<Void, Void, Void> {
List<String> images = new ArrayList<String>();
@Override
protected Void doInBackground(Void... arg0) {
for (int i = 0; i < 5; i++) {
// api Aufruf welcher einfach eine URL mit einem Bild liefer
String m = handler.GetImages(getActivity().getApplicationContext(), i);
images.add(m);
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
FillGridView(images.toArray(new String[images.size()]));
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
}
Alles anzeigen
Aufrufstelle des Threads, aus einem Fragment:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_home, container, false);
gridview = (GridView)rootView.findViewById(R.id.grid_view);
new LoadImagesAsync().execute();
gridview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Intent i = new Intent(getActivity(), ImageDetail.class);
i.putExtra("imageId", position);
startActivity(i);
}
});
return rootView;
};
private void FillGridView(String[] images) {
gridview.setAdapter(new LazyImageAdapter(getActivity(), images));
}
Alles anzeigen
Und natürlich der BaseAdapter:
public class LazyImageAdapter extends BaseAdapter{
private Activity activity;
private String[] data;
private static LayoutInflater inflater = null;
public ImageLoader imageLoader;
public LazyCoverImageAdapter(Activity a, String[] d) {
activity = a;
data = d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader = new ImageLoader(activity);
}
public int getCount() {
return data.length;
}
public Object getItem(int position) {
return data[position];
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if(convertView == null) {
imageView = new ImageView(activity.getApplicationContext());
imageView.setLayoutParams(new GridView.LayoutParams(150, 180));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView)convertView;
}
imageLoader.DisplayImage(data[position], R.drawable.ic_launcher, imageView);
return imageView;
}
}
Alles anzeigen
Achso, und das Gridview evtl. noch:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/grid_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="3"
android:verticalSpacing="10dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:stretchMode="columnWidth"
android:gravity="center">
</GridView>
</RelativeLayout>
Alles anzeigen
Wenn ich dem BaseAdapter statisch Bilder gebe funktioniert das ganze.
Bin für jede Hilfe dankbar.
beste Grüße
manuell