انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
رفتار نرمال گرید ویو (به هم ریختگی item ها هنگام اسکرول)

رفتار نرمال گرید ویو (به هم ریختگی item ها هنگام اسکرول)

#1
سلام
وقت بخیر
من از یه گرید ویو سفارشی استفاده می کنم برای نمایش یک سری اطلاعات ، نام و عکس.
حدود 50-60 تا ایتم برای نمایش وجود داره، وقتی گرید ویو رو اسکرول می کنم رو به بالا یا پایین ، جای ایتم ها عوض میشه و همچنین ایتم های تکراری نمایش داده میشه

این رفتار گرید ویو نرمال هست یا مشکل از کد های من هست؟!
پاسخ

رفتار نرمال گرید ویو (به هم ریختگی item ها هنگام اسکرول)

#2
سلام.
مشکل از کدها می باشد. این مشکل، برای مواردی مثل ListView و GridView  که در آنها تعدادی item را با Adapter می سازیم، ممکن است پیش بیاید (هنگام کدنویسی غلط). 
این نکته را در کلید زیر شرح داده ایم و راه حل آن نیز بیان شده است :

کلید شماره 2961

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط parniaznet

رفتار نرمال گرید ویو (به هم ریختگی item ها هنگام اسکرول)

#3
(۱۳۹۴/۰۲/۲۳, ۰۱:۴۶ ب.ظ)'admin' نوشته: سلام.
مشکل از کدها می باشد. این مشکل، برای مواردی مثل ListView و GridView  که در آنها تعدادی item را با Adapter می سازیم، ممکن است پیش بیاید (هنگام کدنویسی غلط). 
این نکته را در کلید زیر شرح داده ایم و راه حل آن نیز بیان شده است :

کلید شماره 2961


 

ممنون من اون مقاله رو خوندم و اونطور که گفته :

پس اگر کدها را بر اساس شماره متناظر با item ها بنویسیم، دیگر وابسته به بالا و پایین رفتن در ListView نخواهند بود.

خب چجوری باید کد ها رو بر اساس شماره متناظر با ایتم ها نوشت؟

الان کد گرید ویو من این هست :

کد پی‌اچ‌پی:
public class CustomGrid extends BaseAdapter{
      private 
Context mContext;
      private final 
String[] web;
      private final 
int[] Imageid

        public 
CustomGrid(Context c,String[] web,int[] Imageid ) {
            
mContext c;
            
this.Imageid Imageid;
            
this.web web;
        }

        @
Override
        
public int getCount() {
            
// TODO Auto-generated method stub
            
return web.length;
        }

        @
Override
        
public Object getItem(int position) {
            
// TODO Auto-generated method stub
            
return null;
        }

        @
Override
        
public long getItemId(int position) {
            
// TODO Auto-generated method stub
            
return 0;
        }

        @
Override
        
public View getView(int positionView convertViewViewGroup parent) {
            
// TODO Auto-generated method stub
            
View grid;
            
LayoutInflater inflater = (LayoutInflatermContext
                
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            
            if (
convertView == null) {  
                
                
grid = new View(mContext);
                
grid inflater.inflate(R.layout.grid_itemnull);
                
TextView textView = (TextViewgrid.findViewById(R.id.textView1);
                
ImageView imageView = (ImageView)grid.findViewById(R.id.imageView1);
                
                
String tasvir "http://eydkojaberim.ir/mooyekhoob/tasavir/" Imageid[position] + ".jpg";
                
                
int loader R.drawable.a74;
                
ImageLoader imgLoader = new ImageLoader(mContext);
                
imgLoader.DisplayImage(tasvirloaderimageView);

                
textView.setText(web[position]);
                
            } else {
                
grid convertView;
            }
            
            return 
grid;
        }

پاسخ

رفتار نرمال گرید ویو (به هم ریختگی item ها هنگام اسکرول)

#4
کدهای تعیین منابع عناصر، بر اساس position هستند و بنابراین مشکلی ندارند. شما ساختار روش getView را همانند همان کلید تغییر بدهید. مثلا در آن کلید، به صورت زیر است :

کد پی‌اچ‌پی:
@Override
public View getView(int positionView convertViewViewGroup parent) {
        
LayoutInflater inflater = (LayoutInflatergetSystemService(Context.LAYOUT_INFLATER_SERVICE);
        
View row inflater.inflate(R.layout.list_itemparentfalse);
        
        
String stringName "string_key_" String.valueOf(position+1); 
        
int string_res_ID getResources().getIdentifier(stringName,"string",getPackageName());
        
String my_string getResources().getString(string_res_ID);
        
TextView tv = (TextViewrow.findViewById(R.id.textView1);
        
tv.setText(my_string);
        
        
String imageName "key_" String.valueOf(position+1); 
        
int image_res_ID getResources().getIdentifier(imageName,"drawable",getPackageName());
        
ImageView iv = (ImageViewrow.findViewById(R.id.imageView1);
        
iv.setImageResource(image_res_ID);

        return 
row;


کاری با تعیین منابع برای عنصرها نداریم. منظورم این بخش می باشد :

کد پی‌اچ‌پی:
View row inflater.inflate(R.layout.list_itemparentfalse); 

در خط بالا، لایه متناظر با لایه گرافیکی item ها (در اینجا برابر R.layout.list_item) ذکر شده. شما هم نام ذکر شده در پروژه اندروید خود را بیابید.
همچنین بخش های اضافه کد خود را حذف کنید (آن بخش if و else) تا کامل مشابه مورد بالا (ساختار ذکر شده برای روش getView) شود.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط parniaznet ، شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان