J'ai utilisé MVVM, Databinding et Retrofit pour développer cette application. J'ai chargé des données dans RecyclerView. Lorsque je clique sur un élément de RecyclerView, j'ai besoin de la position et des informations détaillées de ce poste. Parce que je vais montrer cette information dans une activité différente. Comment puis je faire ça?Comment puis-je sélectionner la position de l'article et les détails de l'article (modèle) dans RecyclerView?
J'ai besoin d'informations sur l'article et la position après avoir cliqué dessus. C'est sous View Model.
public void onItemClick(View view){
Intent innn=new Intent(view.getContext(),HomeActivity.class);
view.getContext().startActivity(innn);
}
Voir Modèle:
package com.nitolniloygroup.operating.viewmodel;
import android.content.Context;
import android.content.Intent;
import android.databinding.BaseObservable;
import android.databinding.Bindable;
import android.view.View;
import android.widget.Toast;
import com.nitolniloygroup.operating.BR;
import com.nitolniloygroup.operating.model.Movie;
import com.nitolniloygroup.operating.view.activity.HomeActivity;
import com.nitolniloygroup.operating.view.activity.LoginActivity;
/**
* Created by durloveit on 12-Mar-2017.
*/
public class MovieMVVMViewModel extends BaseObservable {
private Movie mMovie;
private Context mContext;
public MovieMVVMViewModel(Movie mMovie, Context mContext) {
this.mMovie = mMovie;
this.mContext = mContext;
}
@Bindable
public String getTitle() {
return mMovie.getTitle();
}
public void setTitle(String title) {
mMovie.setTitle(title);
notifyPropertyChanged(BR.title);
}
@Bindable
public String getSubtitle() {
return mMovie.getReleaseDate();
}
public void setSubtitle(String subtitle) {
mMovie.setReleaseDate(subtitle);
notifyPropertyChanged(BR.subtitle);
}
@Bindable
public String getDescription() {
return mMovie.getOverview();
}
public void setDescription(String description) {
mMovie.setReleaseDate(description);
notifyPropertyChanged(BR.description);
}
public View.OnClickListener onReadMoreClicked(){
return new View.OnClickListener(){
@Override
public void onClick(View view){
//Toast.makeText(view.getContext(), "Button Read More", Toast.LENGTH_SHORT).show();
Intent innn=new Intent(view.getContext(),LoginActivity.class);
view.getContext().startActivity(innn);
}
};
}
public void onItemClick(View view){
Intent innn=new Intent(view.getContext(),HomeActivity.class);
view.getContext().startActivity(innn);
}
}
Adaptateur:
package com.nitolniloygroup.operating.view.adapter;
import android.content.Context;
import android.databinding.DataBindingUtil;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;
import com.nitolniloygroup.operating.databinding.ListItemMoviemvvmBinding;
import com.nitolniloygroup.operating.model.Movie;
import com.nitolniloygroup.operating.viewmodel.MovieMVVMViewModel;
import com.nitolniloygroup.operating.R;
import java.util.List;
/**
* Created by durloveit on 12-Mar-2017.
*/
public class MovieMVVMAdapter extends RecyclerView.Adapter<MovieMVVMAdapter.BindingHolder>{
private List<Movie> mMovies;
private Context mContext;
public MovieMVVMAdapter(List<Movie> mMovies, Context mContext) {
this.mMovies = mMovies;
this.mContext = mContext;
}
@Override
public BindingHolder onCreateViewHolder(ViewGroup parent,int viewType){
ListItemMoviemvvmBinding binding= DataBindingUtil.inflate(
LayoutInflater.from(parent.getContext()),
R.layout.list_item_moviemvvm,parent,false);
return new BindingHolder(binding);
}
@Override
public void onBindViewHolder(BindingHolder holder,int position){
ListItemMoviemvvmBinding binding=holder.binding;
binding.setMoviemvvmVM(new MovieMVVMViewModel(mMovies.get(position),mContext));
}
@Override
public int getItemCount(){
return mMovies.size();
}
public static class BindingHolder extends RecyclerView.ViewHolder{
private ListItemMoviemvvmBinding binding;
public BindingHolder(ListItemMoviemvvmBinding binding){
super(binding.cardviewMovieitem);
this.binding=binding;
}
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="moviemvvmVM"
type="com.nitolniloygroup.operating.viewmodel.MovieMVVMViewModel"></variable>
</data>
<android.support.v7.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="@{moviemvvmVM::onItemClick}"
android:id="@+id/cardview_movieitem">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:minHeight="72dp"
android:orientation="horizontal"
android:padding="16dp">
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:paddingRight="16dp"
android:textStyle="bold"
android:text="@{moviemvvmVM.title}"
android:textSize="16sp" />
<TextView
android:id="@+id/subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{moviemvvmVM.subtitle}"
android:paddingRight="16dp"
/>
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="3"
android:text="@{moviemvvmVM.description}"
android:paddingRight="16dp"
/>
</LinearLayout>
<Button
android:id="@+id/button5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="right"
android:onClick="@{moviemvvmVM.onReadMoreClicked}"
android:text="Read More" />
</LinearLayout>
</android.support.v7.widget.CardView>
</layout>
Copie possible de [position de l'élément ViewPager avec liaison de données] (http://stackoverflow.com/questions/39463100/position-of-viewpager-item-with-data-binding) –