这更多是一个设计问题,以及如何设计应用程序。我一直在玩碎片,但有一件事对我来说没有意义,就像这样:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
page = getArguments().getInt("someInt", 2);
Button btnOne = (Button) getView().findViewById(R.id.one);
btnOne.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
String currentText = getScreen().getText().toString();
currentText += "1";
getScreen().setText(currentText);
}
});
}
// Inflate the view for the fragment based on layout XML
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.standard_calculator, container, false);
return view;
}
/** Return the screen TextView object for manipulation
* @return screen
*/
public TextView getScreen() {
return screen;
}
屏幕标题是类中的私有变量,这不是整个类,但只是我需要帮助我的问题的一部分。至少会有15个左右的按钮来操作屏幕,把它们都放在onCreate方法中感觉不是很好的练习,我想知道把它们放在另一个类中是否会更好,让片段中的方法更特定于片段的生命周期,尽管可以说按钮是片段使用的,因此应该是类的一部分。也许需要一个“初始化”方法。
我希望有人能指导我一些设计模式或思考应用程序设计的逻辑方式,这是完全不同的。
非常感谢。
将它们放在XML中不如放在代码中灵活。如果不想要XXX匿名方法,可以让自己的片段/类实现View.onClickListener,实现onClick方法:
@Override
public void onClick(final View v) {
if ( v.getId() == R.id.btn_logout ){
// Do One Thing
} else if ( v.getId() == R.id.btn_about) {
// Do Something Else
} else if ( v.getId() == R.id.btn_shutdown) {
// Or Maybe do this :)
}
}
然后在你的onViewCreated中给每个按钮分配“this”
final someBtn = (Button) view.findViewById(R.id.btn_logout);
someBtn.setOnClickListener(this);
这比一堆匿名方法看起来更干净,而且你知道你的点击监听器在一个地方。
您不必在onCreate()方法中初始化它们。事实上,你根本不需要用java代码来初始化它们。您可以简单地在xml中定义它们,并在xml中定义一个“onClick”属性。将为该按钮调用您在“onClick”中设置的方法。这是让你的活动更干净的一种方式。