【问题标题】:How to write modular Android code如何编写模块化 Android 代码
【发布时间】:2011-08-07 01:45:13
【问题描述】:

我有 5 个活动,每个活动显示 10 个按钮。根据数据库中的数据显示或隐藏按钮。目前,我在所有 5 个活动中都有完全相同的代码。如何创建可以包含在每个活动中的单个模块,这样我就不必复制代码?

我目前在每个模块的循环中包含相同的代码:

if ( i == 1 ) ((Button) findViewById(R.id.btn1 )).setVisibility( visible ) ;
if ( i == 2 ) ((Button) findViewById(R.id.btn2 )).setVisibility( visible ) ;
if ( i == 3 ) ((Button) findViewById(R.id.btn3 )).setVisibility( visible ) ;
if ( i == 4 ) ((Button) findViewById(R.id.btn4 )).setVisibility( visible ) ;
if ( i == 5 ) ((Button) findViewById(R.id.btn5 )).setVisibility( visible ) ;

【问题讨论】:

    标签: android modular


    【解决方案1】:

    首先,为了使代码更短,你可以创建一个 id 数组并使用 i 作为索引:

    int ids[] = { R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4,R.id.btn5};
    
    // ....
    
    if (i >= ids.length) {
      // some error
    }
    else {
        ((Button) findViewById(ids[i] )).setVisibility( visible );
    }
    

    如果按钮因活动而异,则可以创建静态方法:

    public static boolean setVisible(int[] ids, int i) {
        if (i >= ids.length) {
            return false;
        }
        else {
            ((Button) findViewById(ids[i] )).setVisibility( visible );
            return true;
        }    
    }
    

    如果都一样,可以将数组创建为与静态方法在同一个类中的静态数组,只传递索引。

    【讨论】:

    • 将该方法提取到抽象基类中并使其虚拟化不是一个更好的主意吗?这样,它只在一个地方,如果您需要一个额外的按钮来执行 10 个活动中的 1 个,您可以获得能够逐个覆盖它的优势。
    • @Justin Shield - 你的评论不清楚,你在说 C# 吗?
    • 抱歉 virtual ~= 可从 C# 覆盖到 Java。我想要得到的是,在所有 5 个活动中,您将为每个活动复制相同的 int[] 结构。如果 int[] 在将数组拉入方法和将该方法放入抽象基类的活动之间没有变化,则可以减少所有活动中的重复量。
    • @Justin Shield - 我会改写我的答案
    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多