- Forum-Beiträge: 137
22.08.2014, 16:53:57 via Website
22.08.2014 16:53:57 via Website
Hallo Leute,
steh mal wieder vor einem Problem.
Ich habe Bilder auf meinem Webspace welche in ein custom_listitem über einen Custom Adapter zuweise.
Die Bilder werden in einem Async Task mittels UrlConnection abgerufen und via ViewHolder an das item übergeben.
Funktioniert alles toll. nach ein paar Sekunden ist die Liste mit den Daten + Bilder da.
Das Problem ist das ich wenn ich jetzt scrolle und die getView wieder ausgeführt wird immer einen riesigen Lagg hab.
Code:
CustomAdapter:
public class SearchAdapter extends BaseAdapter {
Context ctx;
private ArrayList<String[]> mData = new ArrayList<String[]>();
private LayoutInflater mInflater;
public SearchAdapter(Context ctx){
mInflater = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.ctx = ctx;
}
public void addItem(final String name,final String rolle, String mail) {
String[] s = new String[3];
s[0]=name;
s[1]=rolle;
s[2]=mail;
mData.add(s);
notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
@Override
public String getItem(int position) {
// TODO Auto-generated method stub
return mData.get(position).toString();
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.searchitem, null);
holder.username = (TextView)convertView.findViewById(R.id.resultname);
holder.role = (TextView)convertView.findViewById(R.id.searchrolle);
holder.profilepic = (ImageView)convertView.findViewById(R.id.profileimage);
convertView.setTag(holder);
}
else{
holder = (ViewHolder)convertView.getTag();
}
String data[] = mData.get(position);
holder.username.setText(data[0]);
//
holder.role.setText(data[1]);
try {
if(new getpic().execute(data[2]).get()!=null){
holder.profilepic.setImageBitmap(getCircleBitmap(new getpic().execute(data[2]).get()));
}
else{
holder.profilepic.setImageBitmap(getCircleBitmap(BitmapFactory.decodeResource(ctx.getResources(), R.drawable.avatarbild)));
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//holder.profilepic.setImageBitmap(getCircleBitmap(BitmapFactory.decodeResource(ctx.getResources(), R.drawable.ic_action_person)));
return convertView;
}
public class ViewHolder {
public TextView username;
public TextView role;
public ImageView profilepic;
}
private Bitmap getCircleBitmap(Bitmap bitmap) {
final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
final Canvas canvas = new Canvas(output);
final int color = Color.RED;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawOval(rectF, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);
bitmap.recycle();
return output;
}
//----------------------------------
private class getpic extends AsyncTask<String, Void, Bitmap> {
Bitmap image;
URL urlpic;
public void onPreExecute() {
}
@Override
protected Bitmap doInBackground(String... params) {
// TODO Auto-generated method stub
try {
urlpic = new URL("http://bastian-seidemann.de/profilbilder/" + params[0] + ".jpg");
image = BitmapFactory.decodeStream(urlpic.openConnection().getInputStream());
} catch (Exception e) {
Log.e("error", "FEHLERBESCHREIBUNG" + e.toString());
}
return image;
}
public void onPostExecute(Bitmap result) {
}
}
}
Wie kriege ich hin das die Liste erscheint und den Text anzeigt. Und die Bilder erst nach und nach dazu lädt.
Danke schonmal vornweg
— geändert am 22.08.2014, 17:02:04
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.