我如何将图像数据从 recyclerview 传递到新的活动图像视图

问题描述 投票:0回答:1

目前我正在尝试正常构建相册应用程序,我可以在

recyclerview
中显示我所有的250 jpg图像,但我需要显示在新活动
imageview
中点击的每个图像的完整图像大小。

我试图通过 Intent 将数据从

recyclerview
传递到新活动
imageview
但它不起作用(应用程序只是崩溃)

我的适配器

public class myAdapter extends RecyclerView.Adapter <myAdapter.myViewHolder>  {

    Context context;
    ArrayList<tdfImageItem>tdfImageItems;


    public myAdapter(Context context, ArrayList<tdfImageItem> tdfImageItems) {
        this.context = context;
        this.tdfImageItems = tdfImageItems;
    }

    @NonNull
    @Override
    public myAdapter.myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new myViewHolder(LayoutInflater.from(context).inflate(R.layout.tdf_image_item_layout,parent,false));
    }

    @Override
    public void onBindViewHolder(@NonNull myAdapter.myViewHolder holder, int position) {

       int data = tdfImageItems.get(position).getTdfImageItem();
       holder.imageView.setImageResource(data.getTdfImageItem());
   /* all my photos are successfully uploaded in to recyclerview. */

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(context,MainActivity2.class);
                intent.putExtra("haile",data);
                context.startActivity(intent);

            }
        });
    }

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

    public class myViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;


        public ImageView getImageView() {
            return imageView;
        }

        public void setImageView(ImageView imageView) {
            this.imageView = imageView;
        }


        public myViewHolder(@NonNull View itemView, ImageView imageView) {
            super(itemView);
            this.imageView = imageView;

        }

        public myViewHolder(@NonNull View itemView) {
            super(itemView);

            imageView=itemView.findViewById(R.id.image_view);

        }
    }
}

`MainActivity`
public class MainActivity extends AppCompatActivity {
    RecyclerView recyclerView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recycler_view);

       List<tdfImageItem> tdfImageItems = new ArrayList<>();

        tdfImageItems.add(new tdfImageItem(R.drawable.tdf1));
           /*.all 250 R.drawable.tdf photos */
         tdfImageItems.add(new tdfImageItem(R.drawable.tdf250));



        recyclerView.setLayoutManager(new GridLayoutManager(this,2));
        recyclerView.setAdapter(new myAdaper(getApplicationContext(), (ArrayList<tdfImageItem>)      tdfImageItems));

    }
}



public class MainActivity2 extends AppCompatActivity {
    ImageView imageView2;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        imageView2 = findViewById(R.id.image_view2);

        int values = getIntent().getIntExtra("haile",0);
        imageView2.setImageResource(values);
    }
}



`MainActivity2.xml`
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

    <ImageView
        android:id="@+id/image_view3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:src="@drawable/tdf"
        android:contentDescription="@string/image_description"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.463" />

</androidx.constraintlayout.widget.ConstraintLayout>



java arrays
1个回答
0
投票

根据您提供的代码,您在尝试获取图像资源 ID 的 myAdapter 类中似乎有错字。您当前正在调用 data.getTdfImageItem(),但您应该调用 data,因为它已经是表示图像资源 ID 的整数。

这是您的适配器的更正代码:

public class myAdapter extends RecyclerView.Adapter<myAdapter.myViewHolder> {

    Context context;
    ArrayList<tdfImageItem> tdfImageItems;

    public myAdapter(Context context, ArrayList<tdfImageItem> tdfImageItems) {
        this.context = context;
        this.tdfImageItems = tdfImageItems;
    }

    @NonNull
    @Override
    public myViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new myViewHolder(LayoutInflater.from(context).inflate(R.layout.tdf_image_item_layout, parent, false));
    }

    @Override
    public void onBindViewHolder(@NonNull myViewHolder holder, int position) {

        int data = tdfImageItems.get(position).getTdfImageItem();
        holder.imageView.setImageResource(data);

        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(context, MainActivity2.class);
                intent.putExtra("haile", data);
                context.startActivity(intent);

            }
        });
    }

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

    public class myViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;

        public myViewHolder(@NonNull View itemView) {
            super(itemView);

            imageView = itemView.findViewById(R.id.image_view);

        }
    }
}

在您的MainActivity2中,您还尝试访问ID为image_view3而不是image_view2的ImageView。这可能是您的应用程序崩溃的另一个原因。这是更正后的activity_main2.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity2">

    <ImageView
        android:id="@+id/image_view2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="centerCrop"
        android:contentDescription="@string/image_description"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.463" />

</androidx.constraintlayout.widget.ConstraintLayout>

通过这些更正,您的应用程序应该能够将图像资源 ID 传递给 MainActivity2 并在 ImageView 中显示全尺寸图像。

© www.soinside.com 2019 - 2024. All rights reserved.