2016-12-30 43 views
0

我必须检查RecyclerView是否能够layoutManager.findLastCompletelyVisibleItemPosition()对我来说总是会返回-1。这是我的代码。我是指它形成Check if RecyclerView is scrollable检查RecyclerView是否滚动无法正常工作

private void setAdapterData() { 
     mChatAdapter = new ChatAdapter(mMessagesList); 
     mChatMessagesRecyclerView.setAdapter(mChatAdapter); 
     boolean ss=isRecyclerScrollable(); 
     Log.e("ss",ss+""+mMessagesList.size()+"ll"); 
    } 

    public boolean isRecyclerScrollable() { 
     LinearLayoutManager layoutManager = (LinearLayoutManager) mChatMessagesRecyclerView.getLayoutManager(); 

     if (layoutManager == null || mChatAdapter == null) return false; 
     Log.e("ss",layoutManager.findLastCompletelyVisibleItemPosition() +"ll"); 
     return layoutManager.findLastCompletelyVisibleItemPosition() < mChatAdapter.getItemCount() - 1; 

}

我实际的代码是

private void setAdapterData() { 
     mChatAdapter = new ChatAdapter(mMessagesList); 
     mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
     mChatMessagesRecyclerView.setAdapter(mChatAdapter); 
     if(isRecyclerScrollable()) 
      mLayoutManager.setStackFromEnd(true); 
     mChatMessagesRecyclerView.setLayoutManager(mLayoutManager); 

    } 
    public boolean isRecyclerScrollable() { 

      RecyclerView.Adapter adapter = mChatMessagesRecyclerView.getAdapter(); 
      if (mLayoutManager == null || adapter == null) return false; 

      return mLayoutManager.findLastCompletelyVisibleItemPosition() < adapter.getItemCount() - 1; 
     } 

我实际上是寻找答案这个问题

set setStackFromEnd parameter to recycler view based on some condition check

我当前的工作代码

if(mMessagesList.size()>5) 
        setStackFromEndLayoutManager(); 
       setAdapterData(); 

private void setStackFromEndLayoutManager() { 
     mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
     mLayoutManager.setStackFromEnd(true); 
     mChatMessagesRecyclerView.setLayoutManager(mLayoutManager); 
    } 

我硬编码在这里mMessagesList.size()> 5 ...我必须使它作为dynamic..so我寻找答案检查RecyclerView是滚动??/

+0

你在哪里设置布局管理器? –

+0

将布局管理器设置为您的回收站视图 – Charu

+1

在调用isScrollable方法之前设置布局管理器 – Charu

回答

0

试试这个setAdapterData()。 并在所有其他事情之前调用它。

private void setAdapterData() { 
    mChatAdapter = new ChatAdapter(mMessagesList); 

    mLayoutManager = new LinearLayoutManager(getApplicationContext()); 
    mChatMessagesRecyclerView.setLayoutManager(mLayoutManager); 

    mChatMessagesRecyclerView.setAdapter(mChatAdapter); 

    if(isRecyclerScrollable()) 
     mLayoutManager.setStackFromEnd(true); 

} 
public boolean isRecyclerScrollable() { 
     RecyclerView.Adapter adapter = mChatMessagesRecyclerView.getAdapter(); 
     if (mLayoutManager == null || adapter == null) return false; 
      return mLayoutManager.findLastCompletelyVisibleItemPosition() < adapter.getItemCount() - 1; 
} 

而且你不需要setStackFromEndLayoutManager()方法

+0

isRecyclerScrollable总是返回true ....这不工作 –

+0

isRecyclerScrollable()总是返回true ....这不工作。 .even使用单个项目返回true –

+0

int visibleItemCount = mLinearLayoutManager.getChildCount(); if(visibleItemCount Charu

0

HII请补充以下代码CalladapterMethod

private void setAdapterData() { 
    mChatAdapter = new ChatAdapter(mMessagesList); 
    mChatMessagesRecyclerView.setAdapter(mChatAdapter); 
    boolean ss=isRecyclerScrollable(); 
    Log.e("ss",ss+""+mMessagesList.size()+"ll"); 
mChartAdapter.notifyDataSetChanged(); 
} 
0

从您的代码, 你是你的病情后,设置

mChatMessagesRecyclerView.setLayoutManager(mLayoutManager); 

检查你在哪里寻找

mLayoutManager.findLastCompletelyVisibleItemPosition() 

,如果你的条件if(mMessagesList.size()>5)是假的,布局管理器未在recyclerview设置,它不会具备的条件之前任何可见items.Set它。

+0

其实我的期望是取代如果(mMessagesList.size()> 5)这个条件,因为它是静态的,而不是我需要这样funactional调用 –

+0

公共布尔isRecyclerScrollable(){ LinearLayoutManager layoutManager =(LinearLayoutManager)mChatMessagesRecyclerView.getLayoutManager (); if(layoutManager == null || mChatAdapter == null)return false; Log.e(“ss”,layoutManager.findLastCompletelyVisibleItemPosition()+“ll”); return layoutManager.findLastCompletelyVisibleItemPosition()

+0

但它效果不好.... layoutManager.findLastCompletelyVisibleItemPosition()总是返回-1 –

相关问题