Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中助手方法的最佳实践_Java_Android - Fatal编程技术网

Java android中助手方法的最佳实践

Java android中助手方法的最佳实践,java,android,Java,Android,我有两个自定义视图,它们都继承自RelativeLayout。 两者都需要有相同的助手方法 f、 e 如您所见,目前我正在使用一个带有静态方法的helper/utility类来实现此目的。但我对它感到不舒服,并在寻找一种更干净的方式,而不是将视图传递给静态上下文 另一个想法是编写一个从RelativeLayout扩展而来的抽象基类。但是如果我以后想在其他自定义视图中使用helper方法,我不想被限制到RelativeLayout 我的最后一个想法是为每个Helper方法创建一个类。 上面的例子可

我有两个自定义视图,它们都继承自RelativeLayout。 两者都需要有相同的助手方法

f、 e

如您所见,目前我正在使用一个带有静态方法的helper/utility类来实现此目的。但我对它感到不舒服,并在寻找一种更干净的方式,而不是将视图传递给静态上下文

另一个想法是编写一个从RelativeLayout扩展而来的抽象基类。但是如果我以后想在其他自定义视图中使用helper方法,我不想被限制到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;
    }

}
但在这里,我必须始终使用副本和大量对象


解决这个困难的最佳实践是什么?

我通常使用带有私有构造函数的最后一个类来为类似的东西创建一个util类,并将对上下文的引用传递给util类。这样,您的helper/util类就不会保留对上下文的任何引用,例如:

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.convertDpToPixelheight,context

此模式很容易用于视图或上下文之类的对象

我有两个自定义视图,它们都继承自RelativeLayout

如果只有两个自定义视图,则在每个视图的类中分别定义方法。我知道这会增加冗余,但它比将视图传递给静态方法或创建许多对象要好

最好只在传递给方法的对象是不可变的final(在最佳情况下是原始数据类型)时创建静态方法。否则,尽可能避免使用静态辅助方法

在您的例子中,如果您有两个以上的自定义视图,那么像LayoutTransition这样单独的简单java类似乎是一个很好的解决方案

解决这一难题的最佳做法是什么

它总是取决于情况,所以没有任何完美的解决方案。始终会有权衡

这本质上是一个Utils类,也包括在内
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
  }
}