Android 不同的活动从一个布局中使用相同的视图-如何重构?
我有六个这样的活动。我尝试创建包含ImageViews的自定义活动,这样我就不必在每个活动中重复自己。我应该让它保持原样,还是我可以把它放在一个地方,让每个人都使用它(就像布局一样——它只是一个,而且有效):Android 不同的活动从一个布局中使用相同的视图-如何重构?,android,Android,我有六个这样的活动。我尝试创建包含ImageViews的自定义活动,这样我就不必在每个活动中重复自己。我应该让它保持原样,还是我可以把它放在一个地方,让每个人都使用它(就像布局一样——它只是一个,而且有效): 您可以创建一个抽象的BaseActivity活动,该活动将具有这些活动所共有的所有功能,然后您可以使用它扩展需要具有该公共功能的其他活动 或者,您可以简单地使用一个活动,并使用某种类型的开关语句维护其中的所有状态。所有这些都取决于您的需求。您可以创建一个抽象活动ImageryActivty
您可以创建一个抽象的BaseActivity活动,该活动将具有这些活动所共有的所有功能,然后您可以使用它扩展需要具有该公共功能的其他活动
或者,您可以简单地使用一个活动,并使用某种类型的开关语句维护其中的所有状态。所有这些都取决于您的需求。您可以创建一个抽象活动
ImageryActivty
,该活动需要覆盖一些方法,如getContentView
,该方法提供一个布局id:
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。为此,我建议您创建一个可重用的布局images\u布局
,并将其包含在您的每个孩子活动中:
<?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>
您应该可以通过一个活动完成此操作。您可以将参数作为意图附加项传递给活动。在“活动”中定义一些字符串常量:
public static final String ARG_IN_IMAGE_ONE = "ActivityOne.ImageOne";
public static final String ARG_IN_IMAGE_TWO = "ActivityOne.ImageTwo";
...
在创建意图时设置可绘制ID:
intent.putIntExtra(ARG_IN_IMAGE_ONE, R.drawable.c1);
...
并阅读onCreate中的意图:
iv1.setImageDrawable(getResources().getDrawable(getIntent().getIntExtra(ARG_IN_IMAGE_ONE)));
...
您还可以选择创建一个静态生成器,它接受6个图像ID并返回意图。谢谢!这就是我想要的——我甚至可以不使用
getContentView()
,因为我在每个活动中都有相同的布局。
iv1.setImageDrawable(getResources().getDrawable(getIntent().getIntExtra(ARG_IN_IMAGE_ONE)));
...