android - كسول تحميل الصور إلى غريدفيو



json gridview (3)

في طلبي أحتاج إلى تحميل الكثير من الصور من عناوين المواقع وعرضها في غريدفيو. (يمكن أن يكون بين 1-200 الصور). أنا لا أريد لتحميل جميع الصور دفعة واحدة. قرأت عن تحميل كسول وسؤالي هو: هل يمكنني الحصول على جزء واحد فقط من جسون، تحميل الصور في موضوع مختلف، وفقط إذا كان المستخدم انتقل لأسفل غريدفيو، وسوف نستمر في أجزاء أخرى من جسون، و هكذا؟

تحرير: مرحبا مرة أخرى. أريد تنفيذ متعددة حدد في هذا غريدفيو وأنا أواجه صعوبة في تنفيذ التعليمات البرمجية في جيتفيو () طريقة المحول. هذا هو المثال الذي أستخدمه: مثال . كيف يمكنني دمج هذا الرمز في طريقة جيتفيو ():

public View getView(int position, View convertView, ViewGroup parent) {
        CheckableLayout l;
        ImageView i;

        if (convertView == null) {
            i = new ImageView(Grid3.this);
            i.setScaleType(ImageView.ScaleType.FIT_CENTER);
            i.setLayoutParams(new ViewGroup.LayoutParams(50, 50));
            l = new CheckableLayout(Grid3.this);
            l.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT,
                    GridView.LayoutParams.WRAP_CONTENT));
            l.addView(i);
        } else {
            l = (CheckableLayout) convertView;
            i = (ImageView) l.getChildAt(0);
        }

        ResolveInfo info = mApps.get(position);
        i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));

        return l;
    }


public class CheckableLayout extends FrameLayout implements Checkable {
    private boolean mChecked;

    public CheckableLayout(Context context) {
        super(context);
    }

    public void setChecked(boolean checked) {
        mChecked = checked;
        setBackgroundDrawable(checked ?
                getResources().getDrawable(R.drawable.blue)
                : null);
    }

    public boolean isChecked() {
        return mChecked;
    }

    public void toggle() {
        setChecked(!mChecked);
    }

}

بلدي جيتفيو () رمز:

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    ViewHolder holder;
    View vi = convertView;

    if(convertView == null) {
        vi = inflater.inflate(com.egedsoft.instaprint.R.layout.item_clickable, null);
        holder = new ViewHolder();
        holder.imgPhoto = (ImageView)vi.findViewById(com.egedsoft.instaprint.R.id.imageClickable);
        vi.setTag(holder);

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


    if (!arrayUrls.get(position).getThumbnailUrl().isEmpty()){
        imageLoader.DisplayImage(arrayUrls.get(position).getThumbnailUrl(), holder.imgPhoto);
    }


    return vi;
}

https://src-bin.com


Answer #1

الحديث عن الخبرة، انها صعبة لتحقيق التمرير السلس (والاستجابة الشاملة) في حين تستهلك الذاكرة بشكل معقول.

سيكون من الجيد أن تبحث عن الحلول الموجودة أولا، على سبيل المثال، ابدأ هنا: تحميل كسول من الصور في ليستفيو

انتهى بنا المطاف مع حل الملكية المخصصة. وهو موضوع الخلفية التي طوابير تحميل طلبات وتنزيل ومخابئ على وحدة التخزين الخارجية فقط الصور التي لا تزال مرئية. عند وصول صورة جديدة، يتم إخطار الرأي ويحدد متى يخطر الموفق للتحديث.

كما أنه يوفر عرض النطاق الترددي، الذي كان مهما في بعض الحالات.


Answer #2

لقد وجدت إيسيمان الجواب مفيدة جدا، ولكن أوصي أيضا تجنب استخدام اثنين أسينكتاسكس ويمكنك جعل هذا بسهولة.

تحتاج إلى إنشاء طريقة عالمية لجلب البيانات المطلوبة، حيث يمكنك جعل حالة إف / إلس (كمثال):

        movies = fetchMovie.execute(sort).get();
        if (movies == null) {
            movieList = new ArrayList<>();
        } else if (addMovies) {
            movieList.addAll(movies);
        } else {
            movieList = movies;
        }

أدموفيز هو منطقي في طريقة أونسكرول. في أسينكتاسك تقديم الصفحة الحالية في عنوان ورل الاستعلام وفويلا - جعلت رمز الخاص بك أصغر :)


Answer #3

يمكنك، نلقي نظرة على استخدام محول المشاهدات و غريدفيو من وثائق الروبوت. الشيء الأكثر أهمية هو أن محول استدعاء طريقة getView يمر فقط موقف الإدخالات التي تظهر على الشاشة، ويسأل عن مواقف مختلفة عند مخطوطات المستخدم.

طريقة سهلة للقيام هو تحميل الصورة المطلوبة على طريقة getView من المحول الخاص بك مع و أسينكتاسك .

هناك مثال





lazy-loading