Mise à jour: J'ai révisé ma question initiale parce qu'elle était trop vague.setOnClickListener - comment passer dans AdapterView <?> dans onClick
Je viens de mettre en place un RecyclerView et maintenant je veux rendre chaque élément cliquable, de sorte que lorsque je clique sur un élément, il m'amène à DetailsActivity (pour téléphone et tablette) où je peux trouver plus d'informations sur l'article .
J'étais capable de faire ceci avant d'implémenter un recyclerview parce que tout ce que j'avais était un gridview où j'appelais mGridView.setOnItemClickListener.
Voici le code avant recyclerview:
public class BookFragment extends Fragment implements LoaderManager.LoaderCallbacks<Cursor> {
....
.....
public interface CallbackInterface {
/**
* DetailFragmentCallback for when an item has been selected.
*/
public void onItemSelected(Uri bookUri);
}
....
.....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View rootView = inflater.inflate(R.layout.fragment_main, container, false);
// initialize our BookAdapter
mBookAdapter = new BookAdapter(getActivity(), null, 0, CURSOR_LOADER_ID);
// initialize mGridView to the GridView in fragment_main.xml
mGridView = (GridView) rootView.findViewById(R.id.Book_grid);
// set mGridView adapter to our CursorAdapter
mGridView.setAdapter(mBookAdapter);
// make each item clickable
mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
int uriId = position + 1;
Uri uri = ContentUris.withAppendedId(BookContentProvider.Book.CONTENT_URI,
uriId);
Cursor cursor = (Cursor) parent.getItemAtPosition(position);
if (cursor != null) {
((CallbackInterface) getActivity())
.onItemSelected(BookContentProvider.Book.withId(cursor.getLong(0))); // getlong(0) gets the row ID
}
}
});
return rootView;
}
.....
}
Maintenant que j'ai recyclerview il semble que je ne peux pas appeler plus mGridView.setOnItemClickListener, comme Recyclerview n'a pas cette méthode. On dirait que je peux appeler setOnClickListener mais je ne sais pas comment je peux mettre en œuvre dans mon BookCursorAdapter:
Voici mon code BookCursorAdapter:
public class BookCursorAdapter extends CursorRecyclerViewAdapter<BookCursorAdapter.ViewHolder> {
private static final String LOG_TAG = BookCursorAdapter.class.getSimpleName();
private static Context mContext;
private ViewHolder mVh;
public BookCursorAdapter(Context context, Cursor cursor) {
super(context, cursor);
mContext = context;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public final View mView;
public final ImageView imageView;
public ViewHolder(View view) {
super(view);
mView = view;
imageView = (ImageView) view.findViewById(R.id.list_item_book_imageview);
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.list_item_Book, parent, false);
ViewHolder vh = new ViewHolder(itemView);
mVh = vh;
return vh;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) {
DatabaseUtils.dumpCursor(cursor);
int imageIndex = cursor.getColumnIndex(BookColumns.COLUMN_IMAGEPATH);
String image = cursor.getString(imageIndex);
if (image != null) {
Picasso.with(viewHolder.imageView.getContext())
.load("http://image.tmdb.org/t/p/w400/" + image)
.resize(600, 800)
.centerCrop()
.into(viewHolder.imageView);
}
}
}
Salut @Kuffs merci pour la réponse. Je ne suis pas sûr comment je peux faire cela comme je passe actuellement dans un Cursor dans ma méthode onBindViewHolder comme ceci: public void onBindViewHolder (ViewHolder viewHolder, Curseur curseur) { DatabaseUtils.dumpCursor (curseur); int imageIndex = cursor.getColumnIndex (BookColumns.COLUMN_IMAGEPATH); String image = cursor.getString (imageIndex); } } –
Ma réponse est un exemple seulement. Vous l'adapteriez à vos besoins spécifiques. Mon point était que vous définissez l'auditeur au mauvais endroit. – Kuffs
Merci @Kuffs. J'ai juste essayé de mettre en œuvre votre suggestion, mais je suis un peu perdu parce que je n'arrive toujours pas à comprendre comment retourner un curseur. Comme dans mon code précédent, je renvoie un curseur parce que j'appelle parent.getItemAtPosition comme ceci: Cursor cursor = (Cursor) parent.getItemAtPosition (getAdapterPosition()); –