Android Fragment和逻辑应用程序设计

时间:2014-02-18 20:05:52

标签: android android-fragments

这更像是一个设计问题以及如何设计应用程序。我一直在玩碎片,但有一件事对我来说没有意义:

@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方法中,我想知道将它们放在另一个类中是否更好的设计让片段中的方法更加特定于片段的生命周期,尽管可以说片段使用了按钮,因此应该成为类的一部分。也许需要一种“初始化”方法。

我希望有人能够指导我一些设计模式或逻辑方式来思考应用程序设计,这是完全不同的。

非常感谢。

2 个答案:

答案 0 :(得分:1)

将它们放在XML中比在代码中执行它更不通用。如果您不想拥有XXX匿名方法,可以使自己的Fragment / Class实现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);

这比一堆匿名方法更清晰,你知道你在一个地方有你的点击听众。

答案 1 :(得分:0)

您不必在onCreate()方法中初始化它们。实际上,您根本不必在Java代码中初始化它们。您可以在xml中简单地定义它们,并在xml中定义“onClick”属性。将为该按钮调用您在“onClick”中设置的方法。这是让您的活动更清洁的一种方式。