【问题标题】:Android Fragment and logical application designAndroid Fragment 和逻辑应用程序设计
【发布时间】:2014-02-18 20:05:51
【问题描述】:

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

@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 方法中感觉不是一个好习惯,我想知道将它们放在另一个类中是否会更好让片段中的方法更具体到片段的生命周期,尽管可以说按钮由片段使用,因此应该是类的一部分。也许需要一个“初始化”方法。

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

非常感谢。

【问题讨论】:

  • 我也意识到这会崩溃,因为我在创建视图之前引用它......但请坚持原点。

标签: android android-fragments


【解决方案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);

这比一堆匿名方法看起来更干净,而且你知道你在一个地方有你的点击监听器。

【讨论】:

  • 这个好多了,我之前在其他一些实践项目中也做过这个。这可能是最干净的方式,出于与您所说的相同的原因,我不想将它们放在 xml 中 - 它不是通用的,而且我在尝试不同的事情时遇到了一些限制。谢谢你的回答:) 非常感谢。编辑:我也觉得在 xml 中有 onclick 并不是很好的耦合......但这只是我
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2015-08-06
    • 2015-11-10
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多