You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio:如何用单常量Activity承载多可变图片与数据

实现单个通用Activity展示不同Drawable图片的方案

核心思路

通过Intent传递图片资源标识(资源ID或图片名称),让单个通用Activity根据传递的参数加载对应图片,替代100个重复的Activity。


步骤1:创建通用图片展示Activity

1.1 编写布局文件(res/layout/activity_image_display.xml)

只需要一个居中显示的ImageView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center">

    <ImageView
        android:id="@+id/iv_display"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"/>
</LinearLayout>

1.2 编写Activity逻辑(ImageDisplayActivity.java)

接收Intent传递的参数,加载对应图片:

public class ImageDisplayActivity extends AppCompatActivity {
    // 定义参数常量,避免拼写错误
    private static final String EXTRA_IMAGE_RES_ID = "extra_image_res_id";

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

        ImageView imageView = findViewById(R.id.iv_display);
        // 获取传递的图片资源ID
        int imageResId = getIntent().getIntExtra(EXTRA_IMAGE_RES_ID, 0);
        
        if (imageResId != 0) {
            imageView.setImageResource(imageResId);
        }
    }

    // 可选:封装启动方法,简化调用
    public static void start(Context context, int imageResId) {
        Intent intent = new Intent(context, ImageDisplayActivity.class);
        intent.putExtra(EXTRA_IMAGE_RES_ID, imageResId);
        context.startActivity(intent);
    }
}

步骤2:主Activity中处理列表点击

假设你的列表(RecyclerView/ListView)数据中存储了每个名称对应的图片资源ID(比如R.drawable.cat、R.drawable.dog),在点击事件中传递参数:

以RecyclerView Adapter为例:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    // 获取当前项的数据
    YourDataModel item = dataList.get(position);
    holder.tvName.setText(item.getName());

    // 设置点击事件
    holder.itemView.setOnClickListener(v -> {
        // 直接调用封装的启动方法
        ImageDisplayActivity.start(v.getContext(), item.getImageResId());
        
        // 手动创建Intent的写法(可选):
        // Intent intent = new Intent(v.getContext(), ImageDisplayActivity.class);
        // intent.putExtra(ImageDisplayActivity.EXTRA_IMAGE_RES_ID, item.getImageResId());
        // v.getContext().startActivity(intent);
    });
}

备选方案:传递图片名称而非资源ID

如果你的列表数据中存储的是图片文件名(比如"cat"、"dog"),可以通过名称动态获取资源ID:

主Activity传递名称:

holder.itemView.setOnClickListener(v -> {
    Intent intent = new Intent(v.getContext(), ImageDisplayActivity.class);
    intent.putExtra("extra_image_name", item.getImageName());
    v.getContext().startActivity(intent);
});

ImageDisplayActivity中转换并加载:

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

    ImageView imageView = findViewById(R.id.iv_display);
    String imageName = getIntent().getStringExtra("extra_image_name");
    
    if (imageName != null) {
        // 根据名称获取drawable资源ID
        int imageResId = getResources().getIdentifier(imageName, "drawable", getPackageName());
        if (imageResId != 0) {
            imageView.setImageResource(imageResId);
        }
    }
}

最后一步:注册Activity

在AndroidManifest.xml中添加通用Activity的注册:

<activity android:name=".ImageDisplayActivity"/>

这样就只需要主Activity和这一个通用Activity,就能实现点击不同名称展示对应图片的功能。

内容的提问来源于stack exchange,提问作者ملكي سعد

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 19:15:31