【问题标题】:How to stop endless scroll in my app?如何在我的应用程序中停止无休止的滚动?
【发布时间】:2017-04-19 10:46:47
【问题描述】:

我打算在我的第一页上制作网站应用程序并加载提要,但问题是滚动无休止,如何阻止这种情况?滚动是无止境的,所以我想停止它。

    public class FeedActivity extends AppCompatActivity
{
    private SwipeRefreshLayout swipeLayout;
    private RecyclerView listView;

    private LinearLayoutManager layoutManager;

    private FeedAdapter adapter;
    private FeedService service;
    private FeedModel model;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_feed);

        ActionBar actionBar = getSupportActionBar();
        if(null != actionBar)
        {
            actionBar.setDisplayShowHomeEnabled(true);
            actionBar.setIcon(R.mipmap.ic_launcher);
        }

        model = new FeedModel();
        adapter = new FeedAdapter(model);
        service = FeedService.create(model);

        layoutManager = new LinearLayoutManager(this);

        swipeLayout = (SwipeRefreshLayout) findViewById(R.id.swipeLayout);

        listView = (RecyclerView) findViewById(R.id.listView);
        listView.setLayoutManager(layoutManager);
        listView.setAdapter(adapter);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);

    }

    @Override
    protected void onStart()
    {
        super.onStart();

        model.subscribe(onDataChangedListener);
        adapter.setOnItemClickListener(onItemClickListener);
        swipeLayout.setOnRefreshListener(onRefreshListener);

        service.fetchOlder();
    }

    @Override
    protected void onStop()
    {
        super.onStop();

        model.unSubscribe(onDataChangedListener);
        adapter.setOnItemClickListener(null);
        swipeLayout.setOnRefreshListener(null);

    }

    FeedModel.OnDataChangedListener onDataChangedListener = new FeedModel.OnDataChangedListener()
    {
        @Override
        public void onFetchedAndAddedToTop(int count)
        {
            swipeLayout.setRefreshing(false);
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onFetchedAndAddedToBottom(int count)
        {
            if(count == 0)
            {
                adapter.setFooterEnabled(false);
            }

            adapter.notifyDataSetChanged();
        }
    };

    SwipeRefreshLayout.OnRefreshListener onRefreshListener = new SwipeRefreshLayout.OnRefreshListener()
    {
        @Override
        public void onRefresh()
        {
            service.fetchNewer();
        }
    };


    FeedAdapter.OnItemClickListener onItemClickListener = new FeedAdapter.OnItemClickListener()
    {
        @Override
        public void onItemClick(View view)
        {
            int position = listView.getChildAdapterPosition(view);
            FeedItem item = model.get(position);

            Intent intent = new Intent(getApplicationContext(), PostActivity.class);
            intent.putExtra("id", item.getId());

            startActivity(intent);

//            System.out.println("Click: "+item.getTitle());
        }
    };
}

【问题讨论】:

    标签: android scroll android-recyclerview infinite-scroll


    【解决方案1】:

    您可以通过两种方式停止滚动

    1. 如果您知道每次刷新有多少项目在刷新,那么当您获得的项目少于实际项目时,请设置一个条件来停止调用刷新。

    2. 当您没有从之前的刷新中获取数据时,您可以简单地设置一个停止刷新列表的条件。

    希望这有帮助..

    @Rajesh

    【讨论】:

      【解决方案2】:

      要停止无限滚动,请应用一个条件。 例如,每次滚动都会获取 20 个结果并将其添加到列表中。然后你可以申请条件

      if(lastFetchedItemCount!=0&&lastFetchedItemCount%20==0){
      //enable scrolling
      }
      else{
      //disable scrolling
      }
      

      【讨论】:

        猜你喜欢
        • 2021-09-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-28
        • 2017-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多