Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在片段之间切换后,RecyclerView项目消失大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序中有4个片段,它们在NavActivity中管理:
protected void onCreate(Bundle savedInstanceStatE) {
    super.onCreate(savedInstanceStatE);
    setContentView(R.layout.activity_nav);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);


    fab = (FloaTingActionButton) findViewById(R.id.fab);


    // Fab for fragments
    viewPager.addOnPagechangelistener(new ViewPager.onPagechangelistener() {
        @Override
        public void onPageScrolled(int position,float positionOffset,int positionOffsetPixels) {
        }
        @Override
        public void onPageSELEcted(int position) {
        }

        @Override
        public void onPageScrollStateChanged(int statE) {
            switch (statE) {
                case ViewPager.SCROLL_STATE_DRAGGING:
                case ViewPager.SCROLL_STATE_SETTLING:
                    fab.hide(); // Hide animation
                    break;
                case ViewPager.SCROLL_STATE_IDLE:
                    switch (viewPager.getCurrentItem()) {
                        case 0:
                            fragment1.shareFab(fab); 
                        case 1:
                            fragment2.shareFab(fab); 
                            fab.setOnClickListener(new View.onClickListener() {
                                @Override
                                public void onClick(View v) {
                                    startActivity(new Intent(NavActivity.this,MapsActivity.class));
                                }
                            });
                            break;
                        default:
                            fragment1.shareFab(null);
                            break;
                    }
                    if(viewPager.getCurrentItem() == 0 || viewPager.getCurrentItem() == 1)
                        fab.show(); // Show animation
                    break;
            }

        }
    });

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setOnTabSELEctedListener(new TabLayout.onTabSELEctedListener() {
        @Override
        public void onTabSELEcted(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());

        }

        @Override
        public void onTabUnSELEcted(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReSELEcted(TabLayout.Tab tab) {

        }
    });
    tabLayout.setupWithViewPager(viewPager);
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new MainFragment(),"Main");
    adapter.addFragment(new AboutFragment(),"About");
    adapter.addFragment(new CartFragment(),"Cart");
    adapter.addFragment(new CatalogFragment(),"Catalog");
    viewPager.setAdapter(adapter);
}


///////////new class
class ViewPagerAdapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmenttitleList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment,String titlE) {
        mFragmentList.add(fragment);
        mFragmenttitleList.add(titlE);
    }

    @Override
    public CharSequence getPagetitle(int position) {
        return mFragmenttitleList.get(position);
    }
}

@Override
public void onrequestPermissionsResult(int requestCode,@NonNull String[] permissions,@NonNull int[] grantResults) {
    super.onrequestPermissionsResult(requestCode,permissions,grantResults);
    List<Fragment> fragments = getSupportFragmentManager().getFragments();
    if (fragments != null) {
        for (Fragment fragment : fragments) {
            fragment.onrequestPermissionsResult(requestCode,grantResults);
        }
    }
}

}

我面临一个问题,在切换片段后项目消失我认为使用RecyclerView的工具和viewHolder有关.

我试图从我的服务器获取数据,进入片段C(碎片编号3),数据流一切正确显示.

如果我换成碎片B(碎片编号2)或D(碎片编号4),仍然一切正常.
但如果生病了交换到frag A(碎片号1)并返回到碎片3(我的列表项在哪里),
一切都消失了,我得到了空白的屏幕,即使我上下交换,物品也不会再次下载.

这是我的RecyclerView的Frag num 3:

private FloaTingActionButton mSharedFab;
private List<MyProducts> productsList;

//CreaTing Views
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;

//Volley request Queue
private requestQueue requestQueue;


privatE int requestCount = 1;
private static final String URL_INDEX = "http://myserverip/android/product.PHP?page=";
//Tag values to read from json
public static final String TAG_IMAGE_URL = "product_img";
public static final String TAG_PRODUCT_SN = "product_serial_num";
public static final String TAG_PRODUCT_titlE = "product_title";
public static final String TAG_PRODUCT_PRICE = "product_price";
public static final String TAG_PRODUCT_DESCRIPTION = "product_description";


public CartFragment() {
    // required empty public constructor
}

 public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceStatE) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_cart,container,falsE);
    recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
    layoutManager = new linearlayoutmanager(getActivity().getApplicationContext(),linearlayoutmanager.VERTICAL,falsE);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setHasFixedSize(true);

    //Initializing our superheroes list
    productsList = new ArrayList<>();
    requestQueue = Volley.newrequestQueue(getActivity().getApplicationContext());

    //Calling method to get data to fetch data
    getData();

    //Adding an scroll change listener to recyclerview
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODEs.LOLLIPOp)
    {
        recyclerView.addOnScrollListener(new RecyclerView.onScrollListener()
        {
            @Override
            public void onScrolled(RecyclerView recyclerView,int dx,int dy) {
                super.onScrolled(recyclerView,dx,dy);
                if (isLastItemDisplaying(recyclerView)) {
                    getData();
                }
            }
        });
    }
    else
    {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODEs.M)
        {
            recyclerView.setOnScrollchangelistener( new RecyclerView.onScrollchangelistener()
            {
                @Override
                public void onScrollChange(View v,int scrollX,int scrollY,int oldScrollX,int oldScrollY) {
                    if (isLastItemDisplaying(recyclerView)) {
                        getData();
                    }
                }
            });
        }
    }

    //initializing our adapter
    adapter = new CustomAdapter(productsList,getActivity());
    //Adding adapter to recyclerview
    recyclerView.setAdapter(adapter);
    return view ;
}

和customAdapter类:

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {

//Imageloader to load image
private ImageLoader imageLoader;
private Context context;


List<MyProducts> myProducts;

public CustomAdapter(List<MyProducts> myProducts,Context context)
{
    super();
    this.myProducts = myProducts;
    this.context = context;
}

@Override
public CustomAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,int viewTypE) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.product_list,parent,falsE);
    ViewHolder viewHolder = new ViewHolder(v);
    return viewHolder;
}

@Override
public void onBindViewHolder(CustomAdapter.ViewHolder holder,int position) {

    if( myProducts != null) {
        MyProducts myProducts1 = myProducts.get(position);
        imageLoader = ImageVolley.geTinstance(context).getImageLoader();
        imageLoader.get(myProducts1.getProductimage(),ImageLoader.getImageListener(holder.imageView,R.drawable.android_store_log,android.R.drawable.ic_dialog_alert));

        //Showing data to the views
        holder.imageView.setImageUrl(myProducts1.getProductimage(),imageLoader);
        holder.textViewProducttitle.setText(myProducts1.getProducttitle());
        holder.textViewProductDescription.setText(myProducts1.getProductDescription());
        holder.textViewProductserialnumber.setText(myProducts1.getProductSn());
        holder.textViewProductPrice.setText(myProducts1.getProductPrice());
    }
}

@Override
public int getItemCount() {
    return myProducts.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {

    //Views
    public NetworkImageView imageView;
    public TextView textViewProducttitle;
    public TextView textViewProductDescription;
    public TextView textViewProductserialnumber;
    public TextView textViewProductPrice;

    //Initializing Views
    public ViewHolder(View itemView) {
        super(itemView);
        imageView = (NetworkImageView) itemView.findViewById(R.id.imageViewHero);
        textViewProducttitle = (TextView) itemView.findViewById(R.id.textViewProducttitlE);
        textViewProductDescription = (TextView) itemView.findViewById(R.id.textViewProductDescription);
        textViewProductserialnumber = (TextView) itemView.findViewById(R.id.textViewProductserialnumber);
        textViewProductPrice = (TextView) itemView.findViewById(R.id.textViewProductPricE);
    }
}

解决方法

试试这个:
viewPager.setOffscreenPageLimit(3);

setOffscreenPageLimit

大佬总结

以上是大佬教程为你收集整理的android – 在片段之间切换后,RecyclerView项目消失全部内容,希望文章能够帮你解决android – 在片段之间切换后,RecyclerView项目消失所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。