RecyclerView
とがonClick()
で動作しない状況に遭遇しました。 ListView
のように、GridViewで画像をタップ/クリックすると、onClickは単一の項目の詳細を返していません。ムービーのポスターをクリックすると、特定のムービーの詳細が表示されるだけでなく、複数のムービーの詳細がスクロールビューに表示されます。以下のコードでAndroid RecyclerView GridLayoutManager onClick now working
ルック:
public class MoviesGridAdapter extends RecyclerView.Adapter<MoviesGridAdapter.PosterViewHolder> {
private Context context;
private List<Movies> movieItems = new ArrayList<>();
CustomItemClickListener listener;
public MoviesGridAdapter(Context context, List<Movies> movieItems) {
this.context = context;
this.movieItems = movieItems;
}
@Override
public PosterViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.movies_grid_view_item, parent, false);
final MoviesGridAdapter.PosterViewHolder vh = new MoviesGridAdapter.PosterViewHolder(view);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Context zContext = context;
Intent intent = new Intent(zContext, MoviesDetailActivity.class);
Movies movies = movieItems.get(vh.getAdapterPosition());
intent.putExtra("Items Selection", movies.getPosterPath());
intent.putExtra("Items Selection 1", movies.getTitle());
intent.putExtra("Items Selection 2", movies.getReleaseDate());
intent.putExtra("Items Selection 3", movies.getVoteAverage());
intent.putExtra("Items Selection 4", movies.getOverview());
zContext.startActivity(intent);
}
});
return vh;
// return new PosterViewHolder(view);
}
public void setMoviesData(List<Movies> moviesData) {
movieItems = moviesData;
notifyDataSetChanged();
}
@Override
public void onBindViewHolder(PosterViewHolder holder, final int position) {
Context mcontext = context;
Movies movies = movieItems.get(position);
String posterUrlPath = movies.getPosterPath();
Picasso.with(mcontext)
.load(Constants.MOVIES_POSTER_URL + posterUrlPath)
.into(holder.poster);
}
@Override
public int getItemCount() {
return movieItems.size();
}
public class PosterViewHolder extends RecyclerView.ViewHolder {
ImageView poster;
// Context zContext = context;
public PosterViewHolder(final View itemView) {
super(itemView);
// zContext = itemView.getContext();
poster = (ImageView) itemView.findViewById(R.id.movies_image_view_retrofit);
// itemView.setOnClickListener(this);
}
/*@Override
public void onClick(View view) {
Movies movies = movieItems.get(getAdapterPosition());
Intent intent = new Intent(zContext, MoviesDetailActivity.class);
intent.putExtra("Intent", movies);
zContext.startActivity(intent);
}*/
}
}
そして次は、フラグメントである:注意のための君たち
public class MoviesFragment extends Fragment {
private static final int COLUMN_COUNT = 2;
private List<Movies> movieItems = new ArrayList<>();
private RecyclerView recyclerView;
private MoviesGridAdapter adapter;
private Subscription subscription;
public MoviesFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.movies_fragment_content, container, false);
GridLayoutManager layoutManager = new GridLayoutManager(getContext(), COLUMN_COUNT);
recyclerView = (RecyclerView) view.findViewById(R.id.movies_recycler_view);
recyclerView.setHasFixedSize(true);
recyclerView.setLayoutManager(layoutManager);
adapter = new MoviesGridAdapter(getActivity(), movieItems);
recyclerView.setAdapter(adapter);
return view;
}
@Override
public void onStart() {
super.onStart();
if (movieItems != null) {
adapter.setMoviesData(movieItems);
}
loadDate();
}
private void loadDate() {
MoviesAPI api = RetrofitManager.getMoviesClient().create(MoviesAPI.class);
subscription = api.getPopularMovies(APIKeys.MOVIES_DB_API_KEY)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(
new Action1<MoviesResponse>() {
@Override
public void call(MoviesResponse response) {
movieItems = response.getMovies();
adapter.setMoviesData(response.getMovies());
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
}
);
}
}
感謝。私が見ている解決策は、グリッドビューから画像をクリックすると、タイトル、概要、リリース日などの特定の映画の詳細が必要です。
いいえ。私のために働かなかった。私はあなたの提案を試みた。 'onClick'はうまく動作します。 'ListIView'に' OnItemSelectedClick'のような方法が必要です。 – Ronan
申し訳ありませんが、onBindViewHolderの内部にholder.itemView.setOnClickListenerが存在する必要があります。エレメントのViewは、ViewHolderのitemViewフィールドに保持されているので、itemViewに設定することで、エレメントにリスナーを追加できます。 –
'holder.mView.setOnClickListener(新View.OnClickListener(){@Override ます。public void onClickの(ビュービュー){ テントの意図=新しいテント(文脈、MovieDetailsActivity.class); intent.putExtra( "タイトル"、 これは機能しません。これは機能しません。私がクリックすると、アクティビティが意図されますが、NestedScrollViewには20sが表示されます。私はちょうど1つの映画についての詳細がほしいです。 – Ronan