我想为我的应用程序共享过渡。为此,我需要一个 OnItemClickListener
。我已经搜索了一段时间,但没有找到任何适合我的东西。
这是我的 Adapter
和 ViewHolder
:
public class ListAdapter extends RecyclerView.Adapter<ListAdapter.PostViewHolder>{
List<Post> posts;
public ListAdapter(List<Post> posts) {
Log.d("ListAdapter", "");
this.posts = posts;
}
@Override
public int getItemCount() {
Log.d("getItemCount", "");
return posts.size();
}
@Override
public PostViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
Log.d("onCreateView", "");
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.insert_layout, viewGroup, false);
PostViewHolder pvh = new PostViewHolder(v);
return pvh;
}
@Override
public void onBindViewHolder(PostViewHolder postViewHolder, int i) {
Log.d("onBindView", "");
postViewHolder.username.setText(posts.get(i).getUsername());
postViewHolder.text.setText(posts.get(i).getText());
postViewHolder.time.setText(Long.toString(posts.get(i).getTime()));
postViewHolder.postPhoto.setImageResource(posts.get(i).returnIMG());
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
Log.d("onAttached", "");
super.onAttachedToRecyclerView(recyclerView);
}
public static class PostViewHolder extends RecyclerView.ViewHolder{
CardView cv;
TextView username;
TextView time;
TextView text;
ImageView postPhoto;
PostViewHolder(View itemView) {
super(itemView);
Log.d("PostViewHolder", "");
cv = (CardView) itemView.findViewById(R.id.cv);
username = (TextView) itemView.findViewById(R.id.usernameText);
time = (TextView) itemView.findViewById(R.id.timeText);
text = (TextView) itemView.findViewById(R.id.textText);
postPhoto = (ImageView) itemView.findViewById(R.id.postPhoto);
}
}}
对于过渡,我有这个:
Intent intent = new Intent(MainActivity.this, PostViewActivity.class);
ImageView placeImage = (ImageView)view.findViewById(R.id.postPhoto);
TextView textView = (TextView)view.findViewById(R.id.textText);
Pair<View, String> imagePair = Pair.create((View) placeImage, getString(R.string.transition_image));
Pair<View, String> holderPair = Pair.create((View) textView, getString(R.string.transition_username));
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MainActivity.this, imagePair, holderPair);
ActivityCompat.startActivity(MainActivity.this, intent, options.toBundle());
但现在我需要一个 OnClickListener
来连接它。有人可以帮助我吗?
谢谢!
最佳答案
您可以将 OnClickListener
作为构造函数参数传递给您的适配器(或编写一个 setter),并在 onBindViewHolder()< 中将其绑定(bind)到您的
:itemView
/
例如:
List<Post> posts;
View.OnClickListener listener;
public ListAdapter(List<Post> posts, View.OnClickListener listener) {
Log.d("ListAdapter", "");
this.posts = posts;
this.listener = listener;
}
// ...
@Override
public void onBindViewHolder(PostViewHolder postViewHolder, int i) {
Log.d("onBindView", "");
postViewHolder.username.setText(posts.get(i).getUsername());
postViewHolder.text.setText(posts.get(i).getText());
postViewHolder.time.setText(Long.toString(posts.get(i).getTime()));
postViewHolder.postPhoto.setImageResource(posts.get(i).returnIMG());
postViewHolder.itemView.setOnClickListener(listener);
}
在 MainActivity
中实例化您的适配器:
ListAdapter adapter = new ListAdapter(posts, new View.OnClickListener() {
@Override
public void onClick(View v) {
// do your stuff
}
});
关于android - 回收者 View |具有共享转换的 OnItemClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38414405/