android 如何使适配器中的所有项目都可单击?

gajydyqb  于 2023-06-04  发布在  Android
关注(0)|答案(2)|浏览(196)

我按照教程做了一个应用程序。教程的创建者制作了一个“最近”行,其中包含您可以去的地方的照片。
代码是为了在每次点击照片时显示相同的“详细信息活动”。
问题:我已经为最近使用过的照片行中的每张照片创建了4个不同的活动,我想将每张照片链接到其活动。
the DetailsActivity that keeps on showingRecents-row

public class RecentsAdapter extends RecyclerView.Adapter<RecentsAdapter.RecentsViewHolder> {
    Context context;
    List<RecentsData> recentsDataList;
    //the RecentsAdapter code:

    public RecentsAdapter(Context context, List<RecentsData> recentsDataList) {
        this.context = context;
        this.recentsDataList = recentsDataList;
    }

    @NonNull
    @Override
    public RecentsViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.recents_row_item, parent ,false);
        return new RecentsViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RecentsViewHolder holder, int position) {
        holder.countryName.setText(recentsDataList.get(position).getCountryName());
        holder.placeName.setText(recentsDataList.get(position).getPlaceName());
        holder.price.setText(recentsDataList.get(position).getPrice());
        holder.placeImage.setImageResource(recentsDataList.get(position).getImageUrl());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i=new Intent(context, DetailsActivity.class);
                context.startActivity(i);
            }
        });
    }

    @Override
    public int getItemCount() {
        return recentsDataList.size();
    }

    public static final class RecentsViewHolder extends RecyclerView.ViewHolder {
        ImageView placeImage;
        TextView placeName,countryName,price;
        public RecentsViewHolder(@NonNull View itemView) {
            super(itemView);

            placeImage = itemView.findViewById(R.id.place_image);
            placeName = itemView.findViewById(R.id.place_name);
            countryName = itemView.findViewById(R.id.country_name);
            price = itemView.findViewById(R.id.price);
        }
    }
}
tf7tbtn2

tf7tbtn21#

在单击侦听器中传递额外参数:

@Override
public void onBindViewHolder(@NonNull RecentsViewHolder holder, int position) {
    DataItem item = recentsDataList.get(position); //Cleaner code

    holder.countryName.setText(item.getCountryName());
    holder.placeName.setText(item.getPlaceName());
    holder.price.setText(item.getPrice());
    holder.placeImage.setImageResource(item.getImageUrl());

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(context, DetailsActivity.class);
            
            //You can add more arguments here
            i.putExtra("place_name", item.getPlaceName());

            context.startActivity(i);
        }
    });
}

在DetailsActivity.onCreate()中:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    //Get the place name and load the layout accordingly
    String placeName = getIntent().getStringExtra("place_name");
}
e1xvtsh3

e1xvtsh32#

如果要使用Intent来传达消息。您可以使用intent.putExtra()
如果要传递一个bundle,可以使用intent.putExtras()

相关问题