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

مشکل در RecyCler View

مدیریت گفتگو
سعید کاظمی 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام

من طبق این آموزش

یدونه RecyCler View درست کردم . یه مشکل دارم

وقتی که برنامه رو اجرا میکنم هیچی توی RecyCler View نیستش . حالا میرم یه Activity دیگه . دوباره برمیگردم میبینم اطلاعات هستش . نظر من اینه که دفعه اول اطلاعات پر میشه . ولی نشون نمیده . یعنی یه چیزی باید اضافه بشه . حالا نمیدونم چی . میشه کمک کنید منو

اینم کد :

 mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setHasFixedSize(true);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
getData();
mAdapter = new MyRecyclerViewAdapter(G.posts);
mRecyclerView.setAdapter(mAdapter);
RecyclerView.ItemDecoration itemDecoration =
new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
mRecyclerView.addItemDecoration(itemDecoration);

نظرات

سعید کاظمی 10 سال پیش
متد getData . اطلاعات رو میخونه و توی G.posts میریزه
سعید کاظمی 10 سال پیش
دوستان کسی نمیدونه باید چکار کنم . خیلی عجیبه واقعا این مشکل
محمد 10 سال پیش
توی خط 5 دستور getData رو میدید و قبل از اینکه posts اطلاعات رو بگیره recyclerview رو ست کردید. راه حل اول: میتونید میتونید کل کدها رو داخل ترد بذارید. داخل ترد کارها به ترتیبی که قرار میدید انجام میشه. یعنی تا کار اول تکمیل نشه کد به خط بعدی نمیره. (البته setAdapter رو باید در ترد UI انجام بدید) راه حل دوم: داخل متد getData پس از اضافه شدن هر آیتم به لیست posts دستور adapter.notifyItemInserted رو صدا بزنید. راه حل سوم: قبل از اینکه وارد متد تنظیم recyclerView بشید لیست posts رو تکمیل کرده باشید
سعید کاظمی 10 سال پیش
چطوری باید داخل ترد بزارم . همه چی شی گرا هستش . یعنی هر کدوم رو توی کلاس نوشتم
سعید کاظمی 10 سال پیش
این راه سوم رو میشه بیشتر توضیح بدید
سعید کاظمی 10 سال پیش
اینم بگم وقتی متد getData رو توی کلاس G میزارم همه چی درسته و نشون میده . فقط تو خود Activity main هستش که داستان دارم باهاش
محمد 10 سال پیش
یعنی اینکه توی اکتیویتی قبلی یا توی کلاس G بصورت کامل لیست posts رو کامل کنی
سعید کاظمی 10 سال پیش
آخه من بخش مربوط به کامنت هم دارم . یعنی روی هر یک از آیتم های لیست ویو کلیک شد میره کامنت های مربوط به اون رو میاره . پس نمیشه توی اکتیویتی قبلی چیزی رو پر کنم . چون اصلا معلوم نیست که کاربر روی چی کلیک کرده . بهتر نیست از همون ترد استفاده کنم ؟

پاسخ‌ها 2

محمد 10 سال پیش

ترد ربطی به شی گرایی نداره

 new Thread(new Runnable() {
@Override
public void run() {
getData();
mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
mRecyclerView.setHasFixedSize(true);
mAdapter = new MyRecyclerViewAdapter(G.posts);

runOnUiThread(new Runnable() {
@Override
public void run() {
mRecyclerView.setAdapter(mAdapter);
}
});

RecyclerView.ItemDecoration itemDecoration =
new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
mLayoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(mLayoutManager);
mRecyclerView.addItemDecoration(itemDecoration);
}
}).start();

فقط این روش یه مشکلی داره. تا getData به طور کامل انجام نشه recyclerView نمایش داده نمیشه. میتونی یه لودینگ بذاری. بهتره از روش 2 و 3 استفاده کنی

نظرات

سعید کاظمی 10 سال پیش
میشه اون اضافه کردن پروگرس بار هم بگی . ممنون میشم .
محمد 10 سال پیش
1- لایه xml رو RelativeLayout بذار. 2- یه پروگرس دایره ای یا هر چیز دیگه ای که میخوای بذار وسط صفحه و visibility اون رو روی Gone بذار. 3- داخل کدی که بالا نوشتم قبل از getData ویزیبیلیتی پروگرس رو روی Visible بذار و بعد از getData ویزیبیلیتی رو روی Gone بذار
سعید کاظمی 10 سال پیش
آخه بازم همون موقع نشون نمیره . باید دوباره از اکتیویتی برم بیرون بیام تا پر کنه صفحه رو
محمد 10 سال پیش
کی نشون نمیده؟ وقتی که روی یه آیتم کلیک میکنید و دوباره برمیگردید؟
سعید کاظمی 10 سال پیش
برنامه من 2 قسمت داره . یکی پست ها . یکی کامنت ها . الان من مشکلم روی پست هستش . وقتی میرم داخل صفحه پست ها هیچی نشون نمیده برای اولین بار . میام بیرون باز میرم و نشون میده . یعنی دفعه اول پر میشه اطلاعات ولی نشون نمیده توی Recy
سعید کاظمی 10 سال پیش

این لینک پر کرده داده رو و همون موقع نشون میده

نظرات


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