Ich habe einige Bilder im horizontalen Raster angeordnet. Ich möchte mein Raster mit wichtigen Ereignissen von links nach rechts und von rechts nach links verschieben. Wenn ich durch das Gitter gehe passiert zwei DingeRecyclerView stürzt beim Scrollen
Der Artikel an zweiter Stelle ist ausgewählt. Zum Beispiel bin ich auf Position 0 und möchte das nächste Element an Position 1 auswählen, aber mein Raster wählt das Element Position 2 und überspringt das Element Position 1.
beim Scrollen erhalte ich die Null-Zeiger Ausnahme
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; }
scroll Zuhörer
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());
}
}
dies mein logcat ist
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 (int)) veraltet ist, müssen Sie es mit [findViewHolderForAdapterPosition versucht zu ersetzen ] (https://developer.android.com/reference/android/support/v7/widget/RecyclerView.html#findViewHolderForAdapterPosition (int))? – Rehan