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

مشکل در نمایش اطلاعات RecyclerView در فرگمنت

javac  10 سال پیش  10 سال پیش
0 0

یک FragmentPagerAdapter دارم که سه تا fragment رو باید نشون بده وقتی اکتیویتی اصلی اجرا میشه باید فرگمنت اول اطلاعات رو از وب سرویس فراخوانی کنه و در recyclerView نمایش بده . اطلاعات به درستی از از وب سرویس دریافت میشه اما در recyclerView نشونش نمیده!

اگر اطلاعات رو به صورت دستی بدون وب سرویس بدم به recyclerView نشونش میده اما چون دیتا یه خورده طول میکشه تا از وبسرویس دریافت بشه قبل از رسیدن دیتا لیست ایجاد شده و بعد که اطلاعات میاد حتی با notifyDataSetChanged هم دیگه اطلاعات جدید نمایش داده نمیشه!

ActivityMain.java

     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        ViewPager pager = (ViewPager) findViewById(R.id.fragmentPagerMain);

        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        FragmentNavigationDrawer fragNavDrawer = (FragmentNavigationDrawer) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        fragNavDrawer.setUp((DrawerLayout) findViewById(R.id.drawerLayout), toolbar);


        MyFragmentPagerAdapter adapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
        pager.setAdapter(adapter);
        pager.setCurrentItem(3);
        SlidingTabLayout tabs = (SlidingTabLayout) findViewById(R.id.pagerTabLayout);
        tabs.setDividerColors(0);
        tabs.setViewPager(pager);

    }

FragmentPagerAdapter.java

     @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return FragmentList.getInstance(position);
            case 1:
                return FragmentList.getInstance(position);
            case 2:
                return FragmentList.getInstance(position);
            default:
                return FragmentList.getInstance(position);
        }
    }

FragmentList.java

 public class FragmentList extends Fragment {

    private ViewGroup view;
    private ArrayList<ModelPurchase> data = new ArrayList<>();
    private MyRecyclerPurchaseList adapter;
    private RecyclerView recyclerView;

    public static Fragment getInstance(int catId) {
        FragmentList fragment = new FragmentList();

        Bundle bundle = new Bundle();
        bundle.putInt("catId", catId);
        fragment.setArguments(bundle);

        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        view = (ViewGroup) inflater.inflate(R.layout.fragment_list, container, false);
        recyclerView = (RecyclerView) view.findViewById(R.id.listAll);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
int catId = getArguments().getInt("catId"); if (catId == 1) { new HttpRequests().new PurchasedList(new HttpRequests.RequestCompeleteListener() { @Override public void onCompeletd(ArrayList<ModelPurchase> arrayList) { adapter = new MyRecyclerPurchaseList(getActivity(), data); recyclerView.setAdapter(adapter); adapter.notifyDataSetChanged(); } }).getList(); } return view; }

ویرایش: کد رو تغییر دادم به شکل بالا باز هم نمایش نمیده!

ویرایش 2: اینم تصویری از دریافت صحیح اطلاعات

+1 0
دوست عزیز شما باید یک لودینگ نمایش بدید، بعد از دریافت اطلاعات آرایه رو پر کنید و بعد setAdapter کنید. نیازی نیست یکبار با لیست خالی setAdapter انجام بشه. (10 سال پیش)
0 0
کلا set کردن اطلاعات رو گذاشتم داخل onCompeleted باز هم فایده نداره! نشون داده نمیشه! (10 سال پیش)
0 0
پس میشه نتیجه گرفت شما هیچ اطلاعاتی از وب سرویس دریافت نمیکنید! کلا دوستانی که توی این انجمن هستن توی دیباگ کردن ضعیفن! خیلی ساده میتونید بفهمید مشکل از آداپتره یا وب سرویس، فقط کافیه توی قسمت onCompeletd و onErrorListener یک breakPoint بذارید و ببینید Response شامل چه مواردی میشه. (10 سال پیش)
0 0
اطلاعات به درستی از وبسرویس دریافت میشه . ( یعنی میگین بعد از این همه مدت یه لاگ هم بلد نیستیم بگیریم:)) (10 سال پیش)
+2 0
نه منظورم من گرفتن لاگ نیست، اینجور مواقع نباید لاگ بگیرید، باید دیباگ کنید. مشکل شما کاملا جابجایی کدهاست، اول باید آداپتر رو بسازید، آرایه رو بهش پاس بدید، بعد setAdapter کنید. هیچ نیازی به notifyDataSetChanged هم نیست. (10 سال پیش)
+1 0
آخ! چه سوتی دادم :) موقع انتقال کدها به onCompleted جابجا گذاشتمش :)) حل شد. (10 سال پیش)
 برای این سوال پاسخی وجود ندارد.

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