首页 > 解决方案 > 当我单击另一个活动中的图像按钮时,获取 recyclerview 项目的位置

问题描述

我会尽量说清楚:

我有一个带有 recyclerview 的应用程序,当用户点击一个 recyclerview 项目时,他会打开一个新活动,直接开始播放视频。

在这个新活动(包含视频视图的活动)中,我插入了三个图像按钮,以允许用户在观看视频时分享、喜欢或下载视频。

我的问题是如何定义每个 imagebutton 的侦听器,以便对选定的 recyclerview 项目执行精确的操作。

所以我希望用户下载他正在看的视频,即与所选项目相对应的视频。

这是我的 recyclerview 适配器:

public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

private Context context;
private LayoutInflater inflater;
private List<Data> data= Collections.emptyList();
Data current;
private EditText editText;
private String GetName;
private int currentPos=0;

// create constructor to innitilize context and data sent from MainActivity
public Adapter(Context context, List<Data> data){
    this.context=context;
    inflater= LayoutInflater.from(context);
    this.data=data;
}

// Inflate the layout when viewholder created
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view=inflater.inflate(R.layout.container, parent,false);
    MyHolder holder=new MyHolder(view);
    return holder;
}

// Bind data
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

    // Obtenir la position actuelle de l'élément dans recyclerview pour lier les données et affecter des valeurs à partir de la liste
    MyHolder myHolder= (MyHolder) holder;
    Data current = data.get(position);

    myHolder.textFishName.setText(current.catName);
    myHolder.textSize.setText(current.sizeName);
    myHolder.textSize.setVisibility(View.GONE);
    myHolder.textType.setText(current.fishName);
    myHolder.textPrice.setText("" + current.price + "");
    myHolder.textPrice.setVisibility(View.GONE);
    myHolder.textPrice.setTextColor(ContextCompat.getColor(context, R.color.colorAccent));

    // load image into imageview using glide
    Glide.with(context).load("http://192.168.43.196/vibe2/images/" + current.fishImage)
            .placeholder(R.drawable.ic_menu_camera)
            .error(R.drawable.ic_menu_camera)
            .into(myHolder.ivFish);

}

// return total item from List
@Override
public int getItemCount() {
    return data.size();
}


class MyHolder extends RecyclerView.ViewHolder {

    TextView textFishName;
    ImageView ivFish;
    TextView textSize;
    TextView textType;
    TextView textPrice;
    TextView counter;
    TextView id;
    ImageButton imageButton;


    // create constructor to get widget reference
    public MyHolder(View itemView) {
        super(itemView);
        editText = itemView.findViewById(R.id.editText);
        textFishName = itemView.findViewById(R.id.textFishName);
        ivFish = itemView.findViewById(R.id.ivFish);
        textSize = itemView.findViewById(R.id.textSize);
        textType = itemView.findViewById(R.id.textType);
        textPrice = itemView.findViewById(R.id.textPrice);
        counter = itemView.findViewById(R.id.counter);
    }
   }
}

我的回收站视图:

RecycleClick.addTo(recyclerView).setOnItemClickListener(new RecycleClick.OnItemClickListener() {
                @Override
                public void onItemClicked(RecyclerView recyclerView, int position, View v) {
                        Intent intent = new Intent(MainActivity.this, PlayVideo.class);
                        intent.putExtra("url", data.get(position).sizeName);
                        intent.putExtra("name", data.get(position).fishName);
                        intent.putExtra("titre", data.get(position).catName);
                        startActivity(intent);
                        overridePendingTransition(R.anim.activity_back_in, R.anim.activity_back_out);
                        finish();
                }
            });

这是我在第二个活动中获得和使用该职位的方法,但它似乎不起作用。无论我点击什么元素,条件都不正确。

final int position = getIntent().getIntExtra("a",-1);

sparkButton1.setEventListener(new SparkEventListener(){
        @Override
        public void onEvent(ImageView button, boolean buttonState) {
            if (position == 0) {
                Toast.makeText(PlayVideo.this, "welcome", Toast.LENGTH_LONG).show();
            }else if (position ==1){
                Toast.makeText(PlayVideo.this, "exit", Toast.LENGTH_LONG).show();
            }
        }

标签: androidandroid-recyclerview

解决方案


如果您的列表项包含喜欢、下载或分享视频的信息,例如,唯一的idurl下载视频的信息,那么只需将该项目传递给第二个活动intent并在那里执行这些任务。
如果您真的想获得对上一个活动的回调,对于您的 imageButtons click 您可以使用BroadcastReceiver.

更新,在你最后一次编辑之后你
没有用键“a”发送任何你的意图。因此你没有得到任何东西。


推荐阅读