Система следующая. Загружаются данные из курсора в ресайклер. Проблема заключается в том, что почему то при нажатии, система не видит нажатый пункт.Насколько я понимаю, не передается позиция.
Код фрагмента
public class FavouritesFragment extends Fragment implements FavouritesAdapter.ItemClickListener {
RecyclerView recyclerView;
View view;
Toolbar toolbar;
ArrayList<FavouriteModel> favouritesList;
FavouritesAdapter favouritesAdapter;
/**
* DB
*/
private SQLiteDatabase mDb;
FavouritesDbHelper favouritesDbHelper;
public FavouritesFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_favourites, container, false);
toolbar = (Toolbar) view.findViewById(R.id.main_toolbar);
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
/**
* DB
*/
favouritesDbHelper = new FavouritesDbHelper(getActivity());
mDb = favouritesDbHelper.getWritableDatabase();
Cursor cursor = getFavouriteCursor();
Log.d("tag", "---Number of rows--- " + cursor.getCount());
favouritesList = new ArrayList<>();
favouritesAdapter = new FavouritesAdapter(getActivity(), cursor, setOnItemClickCallback());
recyclerView = view.findViewById(R.id.recycler_favourites);
recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 2));
recyclerView.setAdapter(favouritesAdapter);
return view;
}
/**
* DB
*/
private Cursor getFavouriteCursor(){
return mDb.query(
Contract.TableInfo.TABLE_NAME,
null,
null,
null,
null,
null,
null
);
}
private OnItemClickListener.OnItemClickCallback setOnItemClickCallback() {
OnItemClickListener.OnItemClickCallback onItemClickCallback = new OnItemClickListener.OnItemClickCallback() {
@Override
public void onItemClicked(View view, int position) {
Log.d("click", "Fav - onItemClicked realisation " + position);
FavouriteModel itemClicked = favouritesList.get(position);
Log.d("click", "Fav - FavouriteModel itemClicked " + itemClicked.toString());
Bundle bundle = new Bundle();
bundle.putString("title", itemClicked.getTitle());
Log.d("click", "Fav - title, itemClicked.getTitle() " + itemClicked.getTitle());
bundle.putString("overview", itemClicked.getOverview());
bundle.putString("release_date", itemClicked.getRelease_date());
bundle.putString("vote_average", itemClicked.getVote_average().toString());
bundle.putString("poster_path", itemClicked.getPoster_path());
bundle.putString("id", itemClicked.getId().toString());
DetailedFragment detailedFragment = new DetailedFragment();
detailedFragment.setArguments(bundle);
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.addToBackStack(null);
transaction.replace(R.id.main_frame_list, detailedFragment);
transaction.commit();
}
};
return onItemClickCallback;
}
@Override
public void onItemClick(View view, int position) {
Log.d("click", "Fav - in Fragment some onItemClick method for what???");
}
}
Код адаптера
public class FavouritesAdapter extends RecyclerView.Adapter<FavouritesAdapter.FavouritesViewHolder> {
private ItemClickListener mClickListener;
OnItemClickListener.OnItemClickCallback onItemClickCallback;
Cursor mCursor;
private Context mContext;
public FavouritesAdapter(Context context, Cursor cursor,
OnItemClickListener.OnItemClickCallback onItemClickCallback) {
this.mCursor = cursor;
this.onItemClickCallback = onItemClickCallback;
this.mContext = context;
}
@NonNull
@Override
public FavouritesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_banner, parent, false);
return new FavouritesViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull FavouritesViewHolder holder, int position) {
if(mCursor.moveToPosition(position)){
String path = mCursor.getString(mCursor.getColumnIndex(Contract.TableInfo.COLUMN_POSTER_PATH));
Log.d("tag", "------> Poster path is " + path);
Picasso.get()
.load(path)
.into(holder.mImageBanner);
}
holder.mImageBanner.setOnClickListener(new OnItemClickListener(position, onItemClickCallback));
}
@Override
public int getItemCount() {
return mCursor.getCount();
}
public class FavouritesViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
ImageView mImageBanner;
public FavouritesViewHolder(View itemView) {
super(itemView);
mImageBanner = (ImageView) itemView.findViewById(R.id.item_banner_image);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
}
}
public void setClickListener(FavouritesAdapter.ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
public interface ItemClickListener {
void onItemClick(View view, int position);
}
}
Код листенера
public class OnItemClickListener implements View.OnClickListener {
private int position;
private OnItemClickCallback onItemClickCallback;
public OnItemClickListener(int position, OnItemClickCallback onItemClickCallback) {
this.position = position;
this.onItemClickCallback = onItemClickCallback;
}
@Override
public void onClick(View view) {
onItemClickCallback.onItemClicked(view, position);
}
public interface OnItemClickCallback {
void onItemClicked(View view, int position);
}
}
Код ошибки
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.borisruzanov.popularmovies, PID: 11139
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.get(ArrayList.java:411)
at com.borisruzanov.popularmovies.FavouritesFragment$1.onItemClicked(FavouritesFragment.java:106)
at com.borisruzanov.popularmovies.OnItemClickListener.onClick(OnItemClickListener.java:16)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Большое спасибо за потраченное время и изучение вопроса. В случае, если вопрос был задан не корректно, просьба сообщить мне, чтобы дальнейшие вопросы я составлял более качественно.
Возможны два вариант:
Сейчас у вас как бы два источника
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости