Android 如何从回收器视图导航到其他活动并传递参数
我实现了一个recycler视图,它工作得很好,但是当我想要处理按钮的点击时,我在recycler视图片段中使用了一个意图,但似乎我不能在这里使用意图将参数传递给活动并导航到它 //我的recyler视图适配器Android 如何从回收器视图导航到其他活动并传递参数,android,android-intent,android-recyclerview,Android,Android Intent,Android Recyclerview,我实现了一个recycler视图,它工作得很好,但是当我想要处理按钮的点击时,我在recycler视图片段中使用了一个意图,但似乎我不能在这里使用意图将参数传递给活动并导航到它 //我的recyler视图适配器 package com.example.miniprojetandroid.adapters; import android.content.Context; import android.content.Intent; import android.util.Log; import a
package com.example.miniprojetandroid.adapters;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.miniprojetandroid.R;
import com.example.miniprojetandroid.models.Bike;
import com.example.miniprojetandroid.ui.activities.BikeDetails;
import com.example.miniprojetandroid.ui.activities.MainActivity;
public class BikesAdapter extends RecyclerView.Adapter<BikesAdapter.BikesViewHolder> {
private final ArrayList<Bike> bikes;
private Context mContext;
public BikesAdapter(Context mContext, ArrayList<Bike> bikes) {
this.mContext = mContext ;
this.bikes = bikes;
}
@NonNull
@Override
public BikesAdapter.BikesViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View mItemView = LayoutInflater.from(mContext).inflate(R.layout.bike_list_item, parent, false);
return new BikesViewHolder(mItemView, this);
}
@Override
public void onBindViewHolder(@NonNull BikesAdapter.BikesViewHolder holder, int position) {
final Bike singleItem = bikes.get(position);
holder.BikeName.setText(singleItem.getModel());
holder.BikeImage.setBackgroundResource(singleItem.getImage());
holder.bikeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(this, BikeDetails.class);
intent.putExtra("bike_id", singleItem.getId());
intent.putExtra("model", singleItem.getModel());
intent.putExtra("type", singleItem.getType());
intent.putExtra("price", singleItem.getPrice());
intent.putExtra("image", singleItem.getImage());
startActivity(intent);
finish();
}
});
holder.BikeImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(mContext,singleItem.getModel(),Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return bikes.size();
}
public class BikesViewHolder extends RecyclerView.ViewHolder {
public final TextView BikeName;
public final ImageView BikeImage;
public final Button bikeView;
final BikesAdapter mAdapter;
public BikesViewHolder(@NonNull View itemView, BikesAdapter mAdapter) {
super(itemView);
this.BikeName = itemView.findViewById(R.id.bikeName);
this.BikeImage = itemView.findViewById(R.id.bikeImage);
this.bikeView = itemView.findViewById(R.id.btn_view);
this.mAdapter = mAdapter;
}
}
}
您应该使用回调将事件传递到使用RecyclerView的活动中。
有关更多信息,请参阅本文。当您创建启动活动的意图时,第一个参数应该是上下文,
startActivity
方法属于上下文类,而不是RecyclerView.Adapter。另外,finish
方法属于活动,因此从适配器调用它也不起作用
下面的例子应该让您大致了解如何使其工作
holder.bikeView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context, BikeDetails.class);
// extras
context.startActivity(intent);
}
});
旁注:您的Bike对象可以是Parcelable的一个实现,这样您就不需要通过它的每个字段作为额外的内容,您只需通过整个内容,如下所示:
// Passing data
intent.putExtra("bike", singleItem);
// Fetching data
Bike bike = getIntent().getParcelableExtra<Bike>("bike");
//传递数据
意向。putExtra(“自行车”,单个项目);
//获取数据
自行车=getIntent().getParcelableExtra(“自行车”);
intent.putExtra(“自行车”,单个项目);不起作用,这条线似乎是红色的,syntaxIt中的错误可能是因为您的自行车类尚未实现Parcelable。但这不在这个问题的范围之内,这只是一个tipi做的,从recycler view fragment到BikeDetails Activity的数据为空如果我删除details Activity并将其替换为显示recycler view所选项目详细信息的片段,会怎么样?但我想知道一个片段如何将对象Bike传递给另一个片段
// Passing data
intent.putExtra("bike", singleItem);
// Fetching data
Bike bike = getIntent().getParcelableExtra<Bike>("bike");