我有六个这样的 Activity 。我尝试制作包含 ImageView 的自定义 Activity ,这样我就不必在每个 Activity 中都重复自己。我应该保持原样,还是可以以某种方式将它放在一个地方并让每个人都使用它(就像布局一样 - 它只是一个并且可以工作):
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));
}
最佳答案
您可以创建一个抽象 Activity 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));
}
}
并且您的子 Activity 必须继承自此 Activity :
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
并将其包含在您的每个子 Activity 中:
<?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>
关于android - 各种 Activity 使用来自同一个布局的相同 View ——如何重构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35584381/