簡體   English   中英

android中helper方法的最佳實踐

[英]Best practice for helper methods in android

我有兩個自定義視圖,它們都從RelativeLayout繼承。 兩者都需要具有相同的輔助方法。

FE

public static void setViewHeight(View v, int heightInDp) {
    ViewGroup.LayoutParams layoutParams = v.getLayoutParams();
    layoutParams.height = Helper.convertDpToPixel(heightInDp);

    v.setLayoutParams(layoutParams);
}

如您所見,目前我正在使用帶有靜態方法的幫助器/實用程序類來實現此目的。 但是我對它感到不舒服並且尋找一種更干凈的方式,而不是將視圖傳遞給靜態上下文。

另一個想法是編寫一個從RelativeLayout擴展的抽象基類。 但是如果我想稍后在其他自定義視圖中使用輔助方法,我不希望受限於RelativeLayout。

我的最后一個想法是為每個Helper方法創建一個類。 對於上面的例子,它可能是這樣的:

public class LayoutTransition {

    private View mView;

    public LayoutTransition(View v) {
        mView = v;
    }

    public View withHeight(int height) {
        ViewGroup.LayoutParams layoutParams = mView.getLayoutParams();
        layoutParams.height = height;
        mView.setLayoutParams(layoutParams);
        return mView;
    }

}

但在這里我必須始終使用副本和許多對象。

這種困難的最佳做法是什么?

我通常使用帶有私有構造函數的final類來為這樣的東西創建一個util類,並將對Context的引用傳遞給util類。 這樣你的helper / util類就不會持有對Context任何引用,例如下面的例子:

public final class LayoutUtils {

  private LayoutUtils() {
    throw new IllegalStateException("No instances.");
  }

  public static void convertDpToPixel(final int heightInDp, final Context context) {
    // make use of final to protect your context
    // do stuff w/ context and height here
  }
}

你可以在代碼中使用它作為LayoutUtils.convertDpToPixel(height, context)

這種模式很容易用於ViewContext類的東西。

我有兩個自定義視圖,它們都從RelativeLayout繼承。

如果只有兩個自定義視圖,則在每個視圖的類中單獨定義方法。 我知道它會增加冗余,但它比將視圖傳遞給靜態方法或創建許多對象更好。

僅當傳遞給方法的對象是不可變的(最終)時,最好創建靜態方法,最好是情境原始數據類型。 否則,請盡可能避免使用靜態輔助方法。

在你的情況下,如果你有兩個以上的自定義視圖,像LayoutTransition這樣的單獨的簡單java類似乎是很好的解決方案。

這種困難的最佳做法是什么?

它總是取決於情況,所以沒有任何完美的解決方案。 總會有權衡取舍

暫無
暫無

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

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