2

我正在尝试将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。

+0

为什么'INT POS =(INT)getItemId(位置)+ 1'而不是'position'。 – xiaoyuan

+0

RecyclerView位置从0开始,API id从1开始 –

+0

哦,明白了。所以你的代码有什么问题吗? – xiaoyuan

回答

0

而是通过回收器查看的位置我通过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); 

我希望这会帮助别人遇到这种类型的问题。

编码快乐:)

2

您可以创建一个接口,然后将位置从适配器传输到活动。

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; 
    } 
0

由于您使用的意图类,你可以简单地得到,如下面的第二个活动的位置通过视图位置

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 
} 
0
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 
    } 
相关问题