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

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

javac  11 سال پیش  11 سال پیش
+3 0

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

item1
item2
item3>>
item4

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

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

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

تشکر:)

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

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

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

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

if(item.position%3==0){
LinearA.setVisibility(View.GONE);
LinearB.setVisibility(View.VISIBLE);
fillSpecialLayout();
}
0 0
فکر جالبیه :) تا چک کنم ببینم جواب میده ممنون. (11 سال پیش)
+1 0
ALU و فکر های جالب اش D: ، به نظر راه معقولی میاد ، احتمالا جواب میده ، ولی بازم تست کردی بگو :) (11 سال پیش)
پاسخ به سوال 
PandaStudio  11 سال پیش
+3 0

سلام

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

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

توی 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);
 }

 

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

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