扩展视图并向其子级添加侦听器

时间:2014-04-03 13:02:41

标签: android android-fragments android-view

非常简单的问题:

我正在夸大观点:

final View dialogView = inflater.inflate(R.layout.dialog_location, null);

final EditText location_input           = (EditText) dialogView.findViewById(R.id.location_input);
final View location_button_clear        = dialogView.findViewById(R.id.location_button_clear);
final Button current_location_dialog    = (Button) dialogView.findViewById ( R.id.current_location_dialog );

我后来将很多听众传递给每个儿童观点,例如

location_button_clear.setOnClickListener(new View.OnClickListener() {  ...  } 
current_location_dialog.setOnClickListener(new View.OnClickListener() { ... }
location_input.addTextChangedListener(new TextWatcher() {  ...  }

这使我的代码成为一个spageti,我不喜欢它。出于可维护性的原因,我想创建一个新的单独的类,在该文件中包含监听器等。

是否可以将dialogView扩展为视图?例如

public class DialogView extends View{
   // somehow here inflate the R.layout.dialog_location   
   // get the children and set the listeners 
}

或我唯一的选择是将DialogView扩展为Fragment,例如

public class DialogView extends Fragment{

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.dialog_location, container, false);
    }

   // other stuff here
}

更新:

我的主要问题是如果我扩展视图

,如何夸大R.layout.dialog_location

1 个答案:

答案 0 :(得分:0)

您可以完美展开View,因为您的原始展示dialogView类型为View。但是,由于您没有指定计划如何组织它,我不确定这将如何提高您的代码可读性。

为了可维护性的原因,我最好提出以下建议:

  • 如果您对多个Listener使用相同的View,请单独定义并为所有Listener分配相同的View这将具有相同的行为。

  • 如果您真的有很多Listener,我会创建一个单独的类作为Singleton并在那里定义整个实现。之后,如果您需要将其分配给某些View,则可以在mySingleton.getMyFooListener()上拨打myView.setOnWhateverListener(...)之类的内容。