我应该将我的监听器和布局变量保存在单独的类中

时间:2015-10-21 23:03:49

标签: java android oop

只想再问我自己的问题。可以google主题,很多人指出结果构造函数的参数列表的大小是不好的做法。另一个要点是,将这样的类保留在activity / fragment中是更好的做法。

以下是长参数列表的示例。

public class ClusterClass {


private Context context;
private SlidingUpPanelLayout slidingUpPanelLayout;
private GoogleMap map;
private View rootView;
private ClusterManager<MyItem> mClusterManager;
private com.support.android.fetchpark.DefaultClusterRenderer mClusterRenderer;
private ShapeDrawable mColoredCircleBackground;
private float mDensity;


public ClusterClass(Context context,View rootView, GoogleMap map, SlidingUpPanelLayout slidingUpPanelLayout){

    this.context = context;
    this.slidingUpPanelLayout = slidingUpPanelLayout;
    this.map = map;
    this.rootView = rootView;

}

这是一个允许我从片段中删除TON代码的类。它也很棒,因为它可能不止一次使用它的UI元素。

public class MyFloatingActionMenu {

View rootView;
Context context;
private FloatingActionButton fab1,fab2,fab3;

public MyFloatingActionMenu(Context context, View rootView) {
    this.rootView = rootView;
    this.context = context;


}


public void setUpFam(){
    //get reference to activity layout inflater
    LayoutInflater inflater = LayoutInflater.from(context);


    //Instantiate the FAM
    FrameLayout container = (FrameLayout) rootView.findViewById(R.id.map_fragment_frame );
    View child = inflater.inflate(R.layout.floatingactionmenu, null);
    container.addView(child);


    //Configure FAM
    FloatingActionMenu menuLabelsRight = (FloatingActionMenu) rootView.findViewById(R.id.menu_labels_right);
    menuLabelsRight.hideMenuButton(false);
    menuLabelsRight.setClosedOnTouchOutside(true);
    menuLabelsRight.setIconAnimated(true);
    menuLabelsRight.showMenuButton(true);
    menuLabelsRight.setEnabled(true);

    //Store each FAB of the FAM
    fab1 = (FloatingActionButton) rootView.findViewById(R.id.map_fab1);
    fab2 = (FloatingActionButton) rootView.findViewById(R.id.map_fab2);
    fab3 = (FloatingActionButton) rootView.findViewById(R.id.map_fab3);

    //set listener for each FAB of the FAM
    fab1.setOnClickListener(fabClickListener);
    fab2.setOnClickListener(fabClickListener);
    fab3.setOnClickListener(fabClickListener);

}


private View.OnClickListener fabClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        String text = "";

        switch (v.getId()) {
            case R.id.map_fab1:
                //do something

                break;
            case R.id.map_fab2:
                text = fab2.getLabelText();
                //fab2.setVisibility(View.GONE);
                break;
            case R.id.map_fab3:
                text = fab3.getLabelText();
                // fab2.setVisibility(View.VISIBLE);
                break;
        }
        Toast.makeText(context, text, Toast.LENGTH_SHORT).show();
    }
};



  }

请让我知道你的想法。虽然我在整个程序中只需要一个这样的实例,但我有一个FloatingActionMenu,我也做了同样的事情。能够在我的两个活动中实例化它似乎是一个很好的OOP练习。我不喜欢的是,我现在拥有近2倍的项目文件,我猜构造函数很长。

1 个答案:

答案 0 :(得分:0)

大班是不好的做法,它始终建议你将其他班级的功能分开。让片段只做简单的函数,比如映射XML并添加监听器。

我认为在将所有代码与片段分开时,您确实正确,因为它可以帮助您更好地组织和维护代码。 :)

请记住

  • 确保您的方法只做一件事。
  • 确保班级没有太多的责任。
  

课程应该很小

     

课程的第一条规则是它们应该很小。第二   类的规则是它们应该小于那个。不,我们是   不要重复函数章节中完全相同的文本。   但与功能一样,较小的是主要规则   设计课程。与功能一样,我们的直接问题始终如一   “有多小?”

     

班级名称应描述其履行的职责。   事实上,命名可能是帮助确定课程的第一种方式   尺寸。如果我们不能为类派生一个简洁的名称,那么它很可能   太大了。班级名称越模糊,就越有可能   责任太多了。例如,类名包括weasel   像处理器或经理或超级这样的词经常暗示不幸   责任的集合。