我有六个这样的活动。我试图制作包含ImageViews的自定义活动,因此我不必在每个活动中重复自己。我应该保留原样,还是可以让它以某种方式放在一个地方让所有人使用(比如布局是 - 它只是一个并且有效):
public class ActivityOne extends AppCompatActivity implements View.OnClickListener {
@Bind(R.id.iv1) ImageView iv1;
@Bind(R.id.iv2) ImageView iv2;
@Bind(R.id.iv3) ImageView iv3;
@Bind(R.id.iv4) ImageView iv4;
@Bind(R.id.iv5) ImageView iv5;
@Bind(R.id.iv6) ImageView iv6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
iv1.setImageDrawable(getResources().getDrawable(R.drawable.c1));
iv2.setImageDrawable(getResources().getDrawable(R.drawable.c2));
iv3.setImageDrawable(getResources().getDrawable(R.drawable.c3));
iv4.setImageDrawable(getResources().getDrawable(R.drawable.c4));
iv5.setImageDrawable(getResources().getDrawable(R.drawable.c5));
iv6.setImageDrawable(getResources().getDrawable(R.drawable.c6));
}
答案 0 :(得分:1)
您可以创建一个抽象的BaseActivity活动,该活动将具有这些活动共有的所有功能,然后您可以使用需要具有该常用功能的其他活动进行扩展
或者您只需使用一个活动并使用某种切换语句维护其中的所有状态,这取决于您的要求
答案 1 :(得分:1)
您可以创建一个需要覆盖某些方法的抽象活动ImageryActivty
,例如提供布局ID的getContentView
:
public abstract class ImageryActivity extends AppCompatActivity {
@Bind(R.id.iv1) ImageView iv1;
@Bind(R.id.iv2) ImageView iv2;
@Bind(R.id.iv3) ImageView iv3;
@Bind(R.id.iv4) ImageView iv4;
@Bind(R.id.iv5) ImageView iv5;
@Bind(R.id.iv6) ImageView iv6;
public abstract int getContentView();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentView());
ButterKnife.bind(this);
iv1.setImageDrawable(getResources().getDrawable(R.drawable.c1));
iv2.setImageDrawable(getResources().getDrawable(R.drawable.c2));
iv3.setImageDrawable(getResources().getDrawable(R.drawable.c3));
iv4.setImageDrawable(getResources().getDrawable(R.drawable.c4));
iv5.setImageDrawable(getResources().getDrawable(R.drawable.c5));
iv6.setImageDrawable(getResources().getDrawable(R.drawable.c6));
}
}
您的孩子活动必须继承这一项:
public class ActivityOne extends ImageryActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public int getContentView() {
return R.layout.activity_one;
}
}
当然,这种布局必须包含具有正确id的所有ImageView。为此,我建议您创建一个可重复使用的布局imagery_layout
并将其包含在您的每个子活动中:
<?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:orientation="vertical">
<include
layout="@layout/imagery_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- And here it comes the content for this particular activity in case there's one -->
</LinearLayout>
答案 2 :(得分:0)
您应该可以使用一个活动执行此操作。您可以将参数作为Intent extras传递给Activities。在Activity中定义一些String常量:
public static final String ARG_IN_IMAGE_ONE = "ActivityOne.ImageOne";
public static final String ARG_IN_IMAGE_TWO = "ActivityOne.ImageTwo";
...
在创建意图时设置Drawable ID:
intent.putIntExtra(ARG_IN_IMAGE_ONE, R.drawable.c1);
...
从onCreate的意图中读取:
iv1.setImageDrawable(getResources().getDrawable(getIntent().getIntExtra(ARG_IN_IMAGE_ONE)));
...
您还可以选择创建一个静态构建器,它可以获取6个图像ID并返回Intent。