بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

استفاده از چند layout در لیست ویو

مدیریت گفتگو
javac 12 سال پیش
آخرین تغییر: 12 سال پیش

میخوام در بین آیتم های لیست ویو مثلا آیتم سوم یک layout  متفاوت نشون بدم :

item1
item2
item3>>
item4

به این صورت در متد getView هرکاری کردم نشد:

 if(position % 3 == 0){
//inflate another layout
}else{
//inflate primary layout
}

چون که در متد fill عناصر روی لیست ویو مربوط به layout اصلی رو مقدار دهی کردم وقتی layout عوض میشه خطای nullPointException رخ میده ، توی متد fill هم مقدار position رو چک کردم اما بازم خطا میده........

تشکر:)

نظرات

مجتبی یگانه 12 سال پیش
تست نکردم ، فقط ایده میدم ! ، شما تو کانستراکتور و متد ساخت آیتم تو آداپتور ، بگو اگه آیتم شماره 3 بود ، این لایه رو اینفلیت کن ، در غیر این صورت اون یکی ! ، چون اونجا شماره آیتم مشخص نیست ، میتونی از یک متغییر استاتیک استفاده کنی ، یعنی هر بار یک آیتم ساخته شد ++ بشه
javac 12 سال پیش
چطور توی کانستراکتور layout رو عوض کنم؟! همونطور که بالا هم توضیح دادم توی متد getView با استفاده از position لایه دوم رو inflate کردم اما جواب نمیده!

پاسخ‌ها 2

مجتبی یگانه 12 سال پیش

خیلی روش فکر نکردم ، اما با یک نگاه کلی رو ساختار آداپتورمون به این نتیجه رسیدم حتی اگه درست کار کنه ، با الواری بودن اش مشکل خواهید داشت ، پس استفاده از 2 xml ممکن نیست

اما یه کار دیگه میشه انجام داد ، شاید یه جور دور زدن مشکل باشه !

شما دو layout رو در یک item_style.xml قرار بدید ، به طور پیشفرض دومی که خاص تر هست رو مخفی کنید ، بعد بگید 

if(item.position%3==0){
LinearA.setVisibility(View.GONE);
LinearB.setVisibility(View.VISIBLE);
fillSpecialLayout();
}

نظرات

javac 12 سال پیش
فکر جالبیه :) تا چک کنم ببینم جواب میده ممنون.
مجتبی یگانه 12 سال پیش
ALU و فکر های جالب اش D: ، به نظر راه معقولی میاد ، احتمالا جواب میده ، ولی بازم تست کردی بگو :)
PandaStudio 12 سال پیش

سلام

از کد های زیر استفاده کن

من با این کد ها تونستم ظاهر اولین عنصر لیست ویو و حتی ظاهر یکی درمیون عناصر را تغییر بدم

توی adapter باید بذاری

    @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 {
            return 1;
        }
    }


    @Override
    public int getViewTypeCount() {
        return 2; // 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);
 }

 

نظرات

javac 12 سال پیش
بیشتر توضیح میدی؟ الان اینا رو گذاشتم توی adapter. حالا چطور لایه مد نظرم رو ست کنم؟ توی getView با position نشد.! تشکر:)
PandaStudio 12 سال پیش
یه قسمتش جاونده بود اضافه کردم. توی این نمونه من شکل اولین آیتم را عوض کردم برای موارد دیگه میتونی مثل کدی که مجتبی جان زده عمل کنی

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