Android 如何从回收器视图导航到其他活动并传递参数

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

我实现了一个recycler视图,它工作得很好,但是当我想要处理按钮的点击时,我在recycler视图片段中使用了一个意图,但似乎我不能在这里使用意图将参数传递给活动并导航到它

//我的recyler视图适配器

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");