簡體   English   中英

各種活動使用一種布局的相同視圖-如何重構?

[英]Various activities use same views from one layout - how to refactor?

我有六個這樣的活動。 我嘗試進行可容納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));
}   

您可以創建一個抽象BaseActivity活動,該活動將具有與那些活動相同的所有功能,然后可以使用需要具有該通用功能的其他活動來對其進行擴展

或者您可以只使用一個活動並使用某種switch語句維護其中的所有狀態,這完全取決於您的要求

您可以創建一個抽象活動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。 為此,我建議您創建一個可重用的布局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>

您應該可以通過一個活動來執行此操作。 您可以將參數傳遞給“活動”作為Intent Extras。 在活動中定義一些字符串常量:

public static final String ARG_IN_IMAGE_ONE = "ActivityOne.ImageOne";
public static final String ARG_IN_IMAGE_TWO = "ActivityOne.ImageTwo";
...

在創建Intent時設置您的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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM