我会尽量保持清楚:
我有一个带有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();
}
}
答案 0 :(得分:0)
如果您的列表项包含喜欢,下载或共享视频的信息,例如,唯一的id
或url
用于下载视频,则只需将该项目传递给第二个活动在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);
}
});