如何将RecyclerView的位置传递给活动?
问题描述:
我正在尝试将recyclerview的位置传递给另一个活动,我将其称为改造接口。我可以通过Recyclerview项目的位置,这样我就可以从API加载不同的岗位如何将RecyclerView的位置传递给活动?
@Override
public void onBindViewHolder(TagAdapter.Tag_ViewHolder holder, final int position) {
holder.tagName.setText(Tags.get(position));
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (position < 8){
int pos = (int) getItemId(position) + 1;
Intent intent = new Intent (view.getContext(), Tag1Post.class);
intent.putExtra("pos", pos);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}
我的终点是
@GET("/tag/{id}/")
Call<Tag> test(@Path("id") int id);
我想RecyclerView位置更换ID。
答
而是通过回收器查看的位置我通过ID的特定帖子导航以评论该帖子。
1.提供额外的意图与适配器
public void onBindViewHolder(PostViewHolder holder, final int position) {
holder.postTitle.setText(posts.get(position).getTitle());
holder.postBody.setText(posts.get(position).getBody());
setAnimation(holder.itemView);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int id = posts.get(position).getId(); // get Id
Intent intent = new Intent(context, CommentActivity.class);
intent.putExtra("pos", id); // Pass Id
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
});
}
2的Bindview支架点击后的ID获取传递意图数据
int mPostId = getIntent().getIntExtra("pos", 0);
3。检索到的数据传递到改造端点
Call<List<Comment>> call = apiService.getComments(mPostId);
改造端点
@GET("/posts/{id}/comments/")
Call<List<Comment>> getComments(@Path("id") int id);
我希望这会帮助别人遇到这种类型的问题。
编码快乐:)
答
您可以创建一个接口,然后将位置从适配器传输到活动。
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (position < 8){
int pos = (int) getItemId(position) + 1;
Intent intent = new Intent (view.getContext(), Tag1Post.class);
intent.putExtra("pos", pos);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
//create your interface in Activity, then send it to adapter and call it here:
yourListener.onTransferPosition(position);
}
}
您的活动实现了接口:
public void onTransferPosition(int position) {
this.position= position;
}
答
由于您使用的意图类,你可以简单地得到,如下面的第二个活动的位置通过视图位置
int position = getIntent().getExtras().getInt("pos");
或者您可以使用接口传递价值
public interface OnRecyclerClickListener {
void makeRestCall(int position);
}
实例化的界面如下
onRecyclerClickListener = (OnRecyclerClick) this.mContext;
发送类似下面
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (position < 8){
int pos = (int) getItemId(position) + 1;
startActivity(new Intent (view.getContext(), Tag1Post.class));
onRecyclerClickListener.makeRestCall(pos);
}
}
视图位置。最后,在你的第二个活动实现接口
public class SecondActivity extends AppCompatActivity implements OnRecyclerClickListener{
@Override
public void makeRestCall(int pos) {
// do your GET request
}
答
private AdapterView.OnItemClickListener mOnClickListener;
使用这个在您的适配器并从您的构造函数中提问。
Adapter(AdapterView.OnItemClickListener onClickListener){
this.mOnClickListener=onClickListener;
}
在支持类中你的onclick方法
这样做:
@Override
public void onClick(View view) {
mOnClickListener.onItemClick(null, view, getAdapterPosition(), view.getId());
}
而且在您实现AdapterView.OnItemClickListener
活动
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
// here you will get the postion of the clicked item
}
为什么'INT POS =(INT)getItemId(位置)+ 1'而不是'position'。 – xiaoyuan
RecyclerView位置从0开始,API id从1开始 –
哦,明白了。所以你的代码有什么问题吗? – xiaoyuan