来自ArrayAdapter的GetView方法上下调用onScroll

时间:2014-03-05 14:18:43

标签: android listview aquery

我有一个带有getview方法的Custom ArrayAdapter,如果我向下和向上滚动,就会调用不同视图的方法,这会使这些视图再次加载(例如下载图像)。 在我的ListActivity类中,我只需要调用adapter = new Adapter ...和list.setAdapter(),然后我下载并解析一个json(使用AQuery库)。

public class AdapterPostagem extends ArrayAdapter<Postagem>{

    Context context;
    LayoutInflater inflater;
    boolean memCache = false;
    boolean fileCache = true;
    String BASE_URL = "https://graph.facebook.com/";

    public AdapterPostagem(Context context, int textViewResourceId,
            List<Postagem> objects) {
        super(context, textViewResourceId, objects);
        // TODO Auto-generated constructor stub
        inflater = (LayoutInflater)context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        this.context = context;
    }

    public class ViewHolder{

        TextView postagem;
        TextView likes;
        ImageView foto;
        View view;
        TextView like;
        TextView share;
        ProgressBar pb;

    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        ViewHolder holder = null;
        Postagem p = new Postagem();
        p = getItem(position);

        AQuery aq;

        UrlImageViewHelper uHelper = new UrlImageViewHelper();
        uHelper.setUseBitmapScaling(false);

        if (convertView == null){

            convertView = inflater.inflate(R.layout.postagem, parent, false);

            Log.d("conv", "convertView_null");

            Postagens posts = new Postagens();
            Postagens.EndlessScrollListener end = posts.new EndlessScrollListener();

            aq = new AQuery(convertView);
            aq.scrolled(end);
            holder = new ViewHolder();
            holder.foto = (ImageView)convertView.findViewById(R.id.foto);
            holder.postagem = (TextView)convertView.findViewById(R.id.postagem);
            holder.like = (TextView)convertView.findViewById(R.id.likes);
            holder.share = (TextView)convertView.findViewById(R.id.shares);
            //holder.pb = (ProgressBar)convertView.findViewById(R.id.progress);

            if (!p.getUrl_foto().equals("")){
                getUrlPhoto(holder.foto, uHelper,p.getId(), aq, R.id.foto);
            }else{
                holder.foto.setVisibility(View.GONE);
            }
            holder.postagem.setText(p.getPostagem());

            convertView.setTag(holder);
        }else{

            Log.d("conv", "convertView");

            holder = (ViewHolder)convertView.getTag();
            Postagens posts = new Postagens();
            Postagens.EndlessScrollListener end = posts.new EndlessScrollListener();
            aq = new AQuery(convertView);
            aq.scrolled(end);
            holder.foto = (ImageView)convertView.findViewById(R.id.foto);
            holder.postagem = (TextView)convertView.findViewById(R.id.postagem);

            if (!p.getId().equals("")){
                getUrlPhoto(holder.foto, uHelper,p.getId(), aq, R.id.foto);
            }else{
                holder.foto.setVisibility(View.GONE);
            }

            //uHelper.setUrlDrawable(holder.foto, p.getUrl_foto());

            setTextWithURL(holder.postagem, p.getPostagem());

            //holder.postagem.setText(p.getPostagem());
            //holder.likes.setText(Integer.toString(p.getLikes()));

        }


        return convertView;
    }

    public void setTextWithURL(TextView t, String s){

        String [] parts = s.split("\\s");

        String finals = "";

        for( String item : parts ) try {
            URL url = new URL(item);
            // If possible then replace with anchor...
            finals = finals + ("<a href=\"" + url + "\">"+ url + "</a> " );    
        } catch (MalformedURLException e) {
            // If there was an URL that was not it!...
            finals = finals + item + " ";
            System.out.print( item + " " );
        }

        t.setClickable(true);
        t.setPaintFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        t.setMovementMethod(LinkMovementMethod.getInstance());
        t.setText(Html.fromHtml(finals));

    }

    public void setPhoto(ImageView img, UrlImageViewHelper uHelper, AQuery aq, JSONObject json, int id){


        String URL = "";
        try {
            URL = json.getJSONArray("images").getJSONObject(1).getString("source");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        //uHelper.setUrlDrawable(img, URL);
//      File file = aq.getCachedFile(URL);
//      Bitmap bp = BitmapFactory.decodeFile(file.getPath());
//      if (bp != null){
//          
//          img.setImageBitmap(bp);
//          
//      }else{
            aq.id(img).image(URL, memCache, fileCache, 0, 0, null, 0, AQuery.RATIO_PRESERVE);
//  
//      }
    }

    public void getUrlPhoto(final ImageView img, final UrlImageViewHelper uHelper, String id, final AQuery aq, final int id_photo){


        aq.ajax(BASE_URL + id, JSONObject.class, new AjaxCallback<JSONObject>() {


            @Override
            public void callback(String url, JSONObject json, AjaxStatus status) {

                Log.d("url", url);

                    if(json != null){

                        setPhoto( img, uHelper, aq, json, id_photo);

                    }else{      
                     Toast.makeText(aq.getContext(), "Error:" + status.getCode(), Toast.LENGTH_LONG).show();
                    }
            }
    });

    }

}

0 个答案:

没有答案