У меня есть изображения, расположенные в горизонтальной сетке. Я хочу переместить сетку слева направо и направо налево, используя ключевые события. Когда я двигаюсь через сетку, произошли две вещи:Аварии RecyclerView при прокрутке
Позиция в позиции вторая. Например, я нахожусь в позиции 0 и хочу выбрать следующий элемент в позиции 1, но моя сетка выбирает позицию позиции 2 и пропускает позицию позиции 1.
на прокрутку я получаю исключение нулевого указателя
if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) { if (mCurrentSelectedPosition + 1 < getItemCount()) { Log.e("current position1",Integer.toString(mCurrentSelectedPosition)); gridHolder = (GridView_Holder) mRecyclerView.findViewHolderForPosition(mCurrentSelectedPosition); gridHolder.itemView.setSelected(false); notifyItemChanged(mCurrentSelectedPosition); notifyDataSetChanged(); int lastItem = lm.findLastCompletelyVisibleItemPosition(); Log.e("last item",Integer.toString(lastItem)); if ((mCurrentSelectedPosition + 1) > lastItem) { // Log.e("Is less", "true"); recyclerView.smoothScrollToPosition(mCurrentSelectedPosition + 1); Log.e("current position2",Integer.toString(mCurrentSelectedPosition)); } else { gridHolder = (GridView_Holder) mRecyclerView.findViewHolderForPosition(mCurrentSelectedPosition + 1); gridHolder.itemView.setSelected(true); Log.e("current position3",Integer.toString(mCurrentSelectedPosition)); } mCurrentSelectedPosition += 1; Log.e("current position4",Integer.toString(mCurrentSelectedPosition)); } return true; }
прокрутки слушатель
gridRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener(){
@Override
public void onScrolled(RecyclerView recyclerView, int x, int y)
{
super.onScrolled(recyclerView, x, y);
try {
GridView_Holder gridHolder;
gridHolder= (GridView_Holder) recyclerView.findViewHolderForPosition(adapter.mCurrentSelectedPosition);
gridHolder.itemView.setSelected(true);
}catch(Exception e){
Log.e("exception",e.getMessage());
}
}
это мой LogCat
java.lang.NullPointerException: Attempt to read from field 'android.view.View android.support.v7.widget.RecyclerView$ViewHolder.itemView' on a null object reference
at com.winettv.recylcerviewwithdpad.GridView_Recycler_Adapter$1.onKey(GridView_Recycler_Adapter.java:193)
at android.view.View.dispatchKeyEvent(View.java:9230)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1635)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.widget.ScrollView.dispatchKeyEvent(ScrollView.java:379)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727)
at android.app.Activity.dispatchKeyEvent(Activity.java:2725)
at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:543)
at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:53)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:315)
[findViewHolderForPosition] (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForPosition (интермедиат)) осуждается, вы пробовали заменить его [findViewHolderForAdapterPosition ] (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForAdapterPosition (интермедиат))? – Rehan