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

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

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

یک 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: اینم تصویری از دریافت صحیح اطلاعات

نظرات

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

هنوز پاسخی ثبت نشده است


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