当我在另一个活动中单击图像按钮时,获取recyclerview项的位置

时间:2018-06-28 07:03:11

标签: android android-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);
    }
   }
}

我的RecyclerView:

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();
            }
        }

3 个答案:

答案 0 :(得分:0)

如果您的列表项包含喜欢,下载或共享视频的信息,例如,唯一的idurl用于下载视频,则只需将该项目传递给第二个活动在intent中并在那里执行这些任务。
如果您确实希望获得上一个活动的回调,请单击image BroadcastReceiver

更新,在您上次修改后
您没有使用键“ a”发送任何内容。因此,您什么也没得到。

答案 1 :(得分:0)

要访问第二个活动中recyclerview的单击位置,您可以:
a)将额外的数据传递给打开活动的意图,例如单击的项目的位置:

intent.putExtra("position", position);

然后您在第二个活动中用int position = getIntent().getIntExtra("position", -1)读了它



b)在另一个类中使用静态变量,例如:

public final class AppData {
    public static int currentPos = -1;
}

,您的onClick将是:

    public void onClick(View view) {
        AppData.currentPos = position;
        showPosition(position);
    }

因此您可以在第二个活动中访问AppData.currentPos

当然,您必须从您始终不使用的适配器类中删除private int currentPos=0;

答案 2 :(得分:0)

我最终通过以下方法找到了解决方案:

recognition

然后将其添加到我的第二个活动中:

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("position", position);
                        startActivity(intent);
                }
            });