آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

تغییر آداپتر در لیست ویو

SaeiD-as  10 سال پیش  10 سال پیش
0 0

سلام دوستان

در لیست ویویی که ایجاد کردم می خوام اولین الوار، دهمین الوار و ... رو از یه آداپتر دیگه بخونه، کدهای لیست ویو  متد getView رو بصورت زیر تغییر دادم:

 @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        StructBazarche item = getItem(position);

        if (convertView == null) {
            if (position == 0 || position == 10 || position ==20) {
                convertView = G.inflater.inflate(R.layout.custom_adapter, parent, false);
            } else {
                convertView = G.inflater.inflate(R.layout.adapter, parent, false);
            }
            holder = new ViewHolder(convertView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.fill(this, item, position);
        return convertView;
    }

مشکلی که وجود داره اینه که الواری که وارد میشه رو باز تغییر میده، یعنی هر هفتا الواری که رد میشه (تعداد کل الواری که در کل صفحه جا میشن) یکبار الوار جدید میشه!

بنظرتون راه حلش چیه؟

0 0
دوستان کسی نظری نداره؟ این لینک رو دیدم اما بازم مشکلم برطرف نشد (10 سال پیش)
0 0
(10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
SaeiD-as  10 سال پیش
0 0

طبق لینکی که در بالا دادم کاری که @atfadev رو انجام دادم، مشکلی که داشت ویو رو میتونستم یکی در میون و یا سه تا در میون عوض کنم و بیشتر از اونو برنامه کرش میکرد، کد های زیر:

 @Override
public int getItemViewType(int position){
// Define a way to determine which layout to use, here it's just evens and odds.
if(position ==0){
return position % getCount();
}else{return1;
}
}
@Override
public int getViewTypeCount(){
return2;
// Count of different layouts
}

اینم داخل متد getView قرار دادم

 if(getItemViewType(position)==0){
        convertView = G.inflater.inflate(R.layout.view1,null);}else{
        convertView = G.inflater.inflate(R.layout.view2,null);}

کار دیگه ای که انجام دادم ویو دومی که میخواستم داخل برنامه قرار بگیره رو زیر آداپتر اصلی قرار دادم و قابلیت نمایششو برای position های صفرم، دهم، ... VISIBLE قرار دادم و برای بقیه position ها GONE قرار دادم، با این کار مشکلم برطرف شد و ویو دوم رو برنامه نشون میداد اما ایرادی که داره اینه که اطلاعات اون ردیفی که ویو دوم رو نشون میدم هم مخفی میشه و تا حالا تنونستم اطلاعاتشو به ردیف بعدی منتقل کنم،

ممنون میشم اگه کسی تاحالا این کارو انجام داده راهنمایی کنه،

با تشکر

پاسخ به سوال 
Criss  10 سال پیش
+1 0

باید posotion های بخش پذیر بر 10 رو پیدا کنید < و روی اونها تغییرات رو ست کنید <

آموزش های استاد در مورد بخش پذیری رو ببینید <

 if(position > 0 || ((position %10) == 0)){
                convertView = G.inflater.inflate(R.layout.custom_adapter, parent,false);
}
else{ convertView = G.inflater.inflate(R.layout.adapter, parent,false);
}

 

0 0
مرسی دوست من، ولی فعلا مشکل بخش پذیری نیست، همانطور که در سوال اولم گفتم هنگامی که الوار جدیدی میاد اونو به عنوان position صفر در نظر میگیره و بنابراین باز ویو رو تغییر میده، کد شمارو هم قرار دادم ولی باز فرقی نداشت و مجدد ویو دوم رو هر چنتا گزینه که رد میشه نشون میده و حتی در اسکرول به بالا و پایین جاشونو هم تغییر میده!! (10 سال پیش)
0 0
اگه میشد همون روش دومی که در بالا گفتم رو درستش کرد بهتر بود، راهی نیست که هنگامی در متد fill به عنوان مثال میگم txtName.setText(item.name) اینو بگم فعلا ست نکن بعد در گزینه بعدی ست کن؟ (10 سال پیش)
0 0
مشکلمو با همون روش دومی که گفته بودم حل کردم، جوابش هم خیلی راحت بود، نه نیازی به راه حل های پیچیده بود و نه آنچنان سخت، حتی کد نویسی هم نمیخواست! فقط کافی بود هنگامی که لایه همونیه که باید ویو کاستوم رو نشون بده بهش بگم ویو رو VISIBLE کن و دیگه کاری به لایه اصلی نداشته باشم، اما من ویو لایه اصلی رو بدون هیچ دلیلی GONE قرار میدادم که یکی از اطلاعات من رو هم مخفی می کرد! (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .