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,提问作者ملكي سعد
相关产品推荐
相关产品推荐

