java - recyclerview 在滚动条上返回相同的位置

标签 java android

大家好,我正在开发一个应用程序,我在其中使用了 recyclerview 和 mapfragment。我已经用 recyclerview 和 onscroll of recyclerview 制作了一个旋转木马,我正在尝试根据特定项目的 LatLong 更改相机位置,现在我的问题是,当我每次滚动 recyclerview 时,它都会返回相同的位置。我早些时候实现了 viewpager 并且我使用了 onPageSelected 方法,它工作正常但是现在我已经切换到 recyclerview 我遇到了这个问题。 我不知道我哪里错了 所以请如果有人可以在这里帮助我。 谢谢你

主要 Activity 代码

carousel_recycler = (RecyclerView)findViewById(R.id.carousel_recycler);
        providers = new ArrayList<>();
        manager = new CenterZoomLayoutManager(this, LinearLayoutManager.HORIZONTAL,false);
        final int scrollPosition = manager.findFirstVisibleItemPosition();
        carousel_recycler.setLayoutManager(manager);
        carousel_recycler.setHasFixedSize(true);
        place_data = getResources().getStringArray(R.array.nearby_place);
        for(String places : place_data){
            NearbyDataProvider nearbyDataProvider = new NearbyDataProvider(listItems[i],places,latitude[j],longitude[k]);
            providers.add(nearbyDataProvider);
            i++;
            j++;
            k++;
        }
        adapter = new CarouselRecycler_Adapter(providers);

        carousel_recycler.setAdapter(adapter);


        LinearSnapHelper snapHelper  = new LinearSnapHelper(){
            @Override
            public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
                View centerView = findSnapView(layoutManager);
                if (centerView == null)
                    return RecyclerView.NO_POSITION;

                int position = layoutManager.getPosition(centerView);
                int targetPosition = -1;
                if (layoutManager.canScrollHorizontally()) {
                    if (velocityX < 0) {
                        targetPosition = position - 1;
                    } else {
                        targetPosition = position + 1;
                    }
                }

                if (layoutManager.canScrollVertically()) {
                    if (velocityY < 0) {
                        targetPosition = position - 1;
                    } else {
                        targetPosition = position + 1;
                    }
                }

                final int firstItem = 0;
                final int lastItem = layoutManager.getItemCount() - 1;
                targetPosition = Math.min(lastItem, Math.max(targetPosition, firstItem));
                return targetPosition;
            }
        };
        snapHelper.attachToRecyclerView(carousel_recycler);
       carousel_recycler.addOnScrollListener(new RecyclerView.OnScrollListener() {
           @Override
           public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
               super.onScrollStateChanged(recyclerView, newState);



               index  = newState;
               if(providers.size()>0){
                   if(!providers.get(index).getLattitude().isEmpty()
                           && !providers.get(index).getLongitude().isEmpty()){
                       double lat = Double.parseDouble(providers.get(index).getLattitude());
                       double lang = Double.parseDouble(providers.get(index).getLongitude());
                       changeCameraPosition(lat,lang);
                   }
                   else {
                       Toast.makeText(MapsMarkerActivity.this, "No last location found", Toast.LENGTH_SHORT).show();
                   }
               }
           }

           @Override
           public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
               super.onScrolled(recyclerView, dx, dy);

               /*index  = scrollPosition;
               if(providers.size()>0){
                   if(!providers.get(scrollPosition).getLattitude().isEmpty()
                           && !providers.get(scrollPosition).getLongitude().isEmpty()){
                       double lat = Double.parseDouble(providers.get(scrollPosition).getLattitude());
                       double lang = Double.parseDouble(providers.get(scrollPosition).getLongitude());
                       changeCameraPosition(lat,lang);
                   }
                   else {
                       Toast.makeText(MapsMarkerActivity.this, "No last location found", Toast.LENGTH_SHORT).show();
                   }
               }*/
           }
       });
    }

最佳答案

这会解决您的问题吗?

rv.addOnScrollListener(new RecyclerView.OnScrollListener() {


    @Override
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState);

        try {

            LinearLayoutManager layoutManager = ((LinearLayoutManager) rv.getLayoutManager());
            int firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();


            Log.e("refresh", "State - " + newState + " : firstVisiblePosition" + firstVisiblePosition);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

});

关于java - recyclerview 在滚动条上返回相同的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50446781/

相关文章:

java - Android:如何从首选项 Activity 类调用主类的方法?

java - 如何知道android中使用的权限列表?

android - RFID在BluetoothSocket中获得串行连接

java - Android-Java RSA解密

android - native 多线程和 JNI

java - 将网页转换为 HTML

java - java - 如何在java 8流中进行条件操作以跳过下一个流操作?

java - JSONArray 未正确解析

android - 从 Activity 外部调用 findViewById()

android - 掌握Android中的onPause()onStop()