android - 各种 Activity 使用来自同一个布局的相同 View ——如何重构?

标签 android

我有六个这样的 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/

相关文章:

android - Google Play 控制台您的应用是否使用广告 ID?

android - @Override 方法的评论

android - 调用 GCMRegistrar.register() 时泄漏的 IntentReceiver 错误

android - Unity 2019 - 无法启用 MultiDex 支持

Android 单元测试 - SQLiteReadOnlyDatabaseException : Attempt to write a readonly database (code 1032)

java - 使用 KSoap 从 Android 调用 webservice 只需返回 "error"字符串

android - 如何从可序列化对象中获取值

android - Android 许可的 IllegalArgumentException 错误

java - 我刚刚安装了 android SDK 更新,现在我的项目充满了错误

java - 如何在android中浏览文件夹并获取所选文件夹的路径