2013-04-20 1 views
0

My questions are about delay image loading using AQueryКак преобразовать базовый код в более эффективный код AQuery

Так что мое приложение это: я прочитал JSON, который содержит различную информацию, а также ссылки на изображения (это делается в процедуре doInBackground из AsyncTask). Кроме того, после прочтения ссылки в этой процедуре, я также читал фото (см ниже код для получения дополнительной информации)

class GetMessages extends AsyncTask<String, Void, String> { 


    @Override 
protected String doInBackground(String... params) { 
    HttpClient httpClient = new DefaultHttpClient(); 
    HttpGet httpGet = new HttpGet(uri); 

      // code that reads the json ....... 
    Bitmap picture = null; 
    try { 
     URL newurl = new URL(json.getString("pic_url")); 
     picture = BitmapFactory.decodeStream(newurl.openConnection() .getInputStream()); 
    }catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

      // after this, i put all the read info, and the pics in a list of 
      // objects, that is then usen in the method onPostExecute to populate 
      // my custom adapter ...see code below 

static class ViewHolder { 
ImageView picView; 
} 

public class MyCustomBaseAdapter extends BaseAdapter { 

    private LayoutInflater mInflater; 

    private ArrayList<Product> products; 

    public ArrayList<Product> getProducts() { 
     return products; 
    } 

    public void setProducts(ArrayList<Product> products) { 
     this.products = products; 
    } 

    public MyCustomBaseAdapter(Context context, ArrayList<Product> products) { 
     this.products = products; 
     this.mInflater = LayoutInflater.from(context); 
    } 

    public int getCount() { 
     return products.size(); 
    } 

    public Object getItem(int position) { 
     return products.get(position); 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder; 

     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.product_item, null); 
      holder = new ViewHolder(); 
      holder.picView = (ImageView) convertView.findViewById(R.id.pic_view); 

      convertView.setTag(holder); 

     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     holder.picView.setImageBitmap(products.get(position).getPicture()); 



     return convertView; 
    } 

Как вы уже можете понять ... если у меня есть как 15 фото ... в пользователи становятся сонными до того, как вся эта информация будет загружена ...

  1. Что я хочу сделать, это использовать вашу задержку Загрузка изображения ... однако, я не могу скомпоновать детали ... как должен ли я изменить свой адаптер?
  2. Я в основном добавляю код со своей вики-страницы и использую его вместо моего метода получения вида? ... любая помощь или ссылка на более полный пример, то, что есть на вики, поможет новичкам вроде меня :)
  3. Может ли эта структура использоваться и в коммерческом приложении?

Спасибо :)

ответ

0

Вот источник демки, которые используют shouldDelay:

https://github.com/androidquery/androidquery/blob/master/demo/src/com/androidquery/test/image/ImageLoadingListActivity.java https://github.com/androidquery/androidquery/blob/master/demo/src/com/androidquery/test/image/ImageLoadingList4Activity.java

Попробуйте сделать это 1 шаг в то время.

Я предлагаю вам просто заменить несколько строк в методе getView, как в примере, и использовать aq.image для загрузки изображений с помощью ваших URL-адресов.

Заменить:

holder.picView.setImageBitmap(products.get(position).getPicture()); 

with: 

AQuery aq = new AQuery(convertView); 
aq.id(holder.picView).image(products.get(position).getPicture()); 

После этого добавить shouldDelay, чтобы сделать его более эффективным.

Ответ принадлежит Петру Лю, одному из гуру относительно этого каркаса :)

 Смежные вопросы

  • Нет связанных вопросов^_^