【问题标题】:Reduce function and avoid repetition减少功能,避免重复
【发布时间】:2022-01-04 10:28:10
【问题描述】:

我想减小函数的大小,从而避免重复。 通过构建一个同时包含我所有命令的函数。 “if”函数存在于三种不同的配置中,是否可以调整所有内容以便能够编写一次? 我们可以对“其他”功能做同样的事情吗? 如果您有什么建议,请不要犹豫,我是 Java 新手,所以我的水平还不够高。

   if (text.substring(15, 18).contains("A"))
            {
                R2.setBackgroundResource(R.drawable.picto_rouge);
            }
            else {
                R2.setBackgroundResource(R.drawable.picto_vert);
            }
             R2.setOnClickListener(a -> {

                 setContentView(R.layout.activity_autodiagnostic_repartiteur);
                 {
                     Repartiteur = findViewById(R.id.Repartiteur);
                     Repartiteur.setBackgroundResource(R.drawable.repartiteur2);

                     BottomNavigationView bandeauNavigationView = findViewById(R.id.bandeau_navigation);
                     bandeauNavigationView.setSelectedItemId(R.id.accueil);
                     bandeauNavigationView.setOnNavigationItemSelectedListener(item -> {
                         switch (item.getItemId()) {
                             case R.id.accueil:
                                 return true;
                             case R.id.commerce:
                                 startActivity(new Intent(getApplicationContext(), PageCommercial.class));
                                 overridePendingTransition(0, 0);
                                 return true;
                             case R.id.services:
                                 startActivity(new Intent(getApplicationContext(), Support.class));
                                 overridePendingTransition(0, 0);
                                 return true;
                             case R.id.info:
                                 startActivity(new Intent(getApplicationContext(), Info.class));
                                 overridePendingTransition(0, 0);
                                 return true;
                         }

                         return false;
                     });
                 }
             });



            if (text.substring(19, 22).contains("A"))
            {
                R3.setBackgroundResource(R.drawable.picto_rouge);
            }
            else {
                R3.setBackgroundResource(R.drawable.picto_vert);
            }
            R3.setOnClickListener(a -> {

                setContentView(R.layout.activity_autodiagnostic_repartiteur);
                {
                    Repartiteur = findViewById(R.id.Repartiteur);
                    Repartiteur.setBackgroundResource(R.drawable.repartiteur3);

                    BottomNavigationView bandeauNavigationView = findViewById(R.id.bandeau_navigation);
                    bandeauNavigationView.setSelectedItemId(R.id.accueil);
                    bandeauNavigationView.setOnNavigationItemSelectedListener(item -> {
                        switch (item.getItemId()) {
                            case R.id.accueil:
                                return true;
                            case R.id.commerce:
                                startActivity(new Intent(getApplicationContext(), PageCommercial.class));
                                overridePendingTransition(0, 0);
                                return true;
                            case R.id.services:
                                startActivity(new Intent(getApplicationContext(), Support.class));
                                overridePendingTransition(0, 0);
                                return true;
                            case R.id.info:
                                startActivity(new Intent(getApplicationContext(), Info.class));
                                overridePendingTransition(0, 0);
                                return true;
                        }

                        return false;
                    });
                }
            });
            
            if (text.substring(23, 26).contains("A"))
            {
                R4.setBackgroundResource(R.drawable.picto_rouge);
            }
            else {
                R4.setBackgroundResource(R.drawable.picto_vert);
            }
            R4.setOnClickListener(a -> {

                setContentView(R.layout.activity_autodiagnostic_repartiteur);
                {
                    Repartiteur = findViewById(R.id.Repartiteur);
                    Repartiteur.setBackgroundResource(R.drawable.repartiteur4);

                    BottomNavigationView bandeauNavigationView = findViewById(R.id.bandeau_navigation);
                    bandeauNavigationView.setSelectedItemId(R.id.accueil);
                    bandeauNavigationView.setOnNavigationItemSelectedListener(item -> {
                        switch (item.getItemId()) {
                            case R.id.accueil:
                                return true;
                            case R.id.commerce:
                                startActivity(new Intent(getApplicationContext(), PageCommercial.class));
                                overridePendingTransition(0, 0);
                                return true;
                            case R.id.services:
                                startActivity(new Intent(getApplicationContext(), Support.class));
                                overridePendingTransition(0, 0);
                                return true;
                            case R.id.info:
                                startActivity(new Intent(getApplicationContext(), Info.class));
                                overridePendingTransition(0, 0);
                                return true;
                        }

                        return false;
                    });
                }
            });

【问题讨论】:

  • 在类中实现 setonclicklistener 并在 onClick() 方法中添加一个基于 view-id 的 switchcase,这将是一种更简洁的代码
  • 你能给我举个例子吗?

标签: java android-studio if-statement switch-statement


【解决方案1】:

将点击侦听器的逻辑移动到一个私有方法中:

private void processClick(int newBackgroundResource) {
    setContentView(R.layout.activity_autodiagnostic_repartiteur);
    {
        Repartiteur = findViewById(R.id.Repartiteur);
        Repartiteur.setBackgroundResource(newBackgroundResource);

        BottomNavigationView bandeauNavigationView = findViewById(R.id.bandeau_navigation);
        bandeauNavigationView.setSelectedItemId(R.id.accueil);
        bandeauNavigationView.setOnNavigationItemSelectedListener(item -> {
            switch (item.getItemId()) {
                case R.id.accueil:
                    return true;
                case R.id.commerce:
                    startActivity(new Intent(getApplicationContext(), PageCommercial.class));
                    overridePendingTransition(0, 0);
                    return true;
                case R.id.services:
                    startActivity(new Intent(getApplicationContext(), Support.class));
                    overridePendingTransition(0, 0);
                    return true;
                case R.id.info:
                    startActivity(new Intent(getApplicationContext(), Info.class));
                    overridePendingTransition(0, 0);
                    return true;
            }

            return false;
        });
    }
}

现在您可以将原始代码缩短为:

if (text.substring(15, 18).contains("A")) {
    R2.setBackgroundResource(R.drawable.picto_rouge);
} else {
    R2.setBackgroundResource(R.drawable.picto_vert);
}

R2.setOnClickListener(a -> processClick(R.drawable.repartiteur2));

if (text.substring(19, 22).contains("A")) {
    R3.setBackgroundResource(R.drawable.picto_rouge);
} else {
    R3.setBackgroundResource(R.drawable.picto_vert);
}

R3.setOnClickListener(a -> processClick(R.drawable.repartiteur3));

if (text.substring(23, 26).contains("A")) {
    R4.setBackgroundResource(R.drawable.picto_rouge);
} else {
    R4.setBackgroundResource(R.drawable.picto_vert);
}

R4.setOnClickListener(a -> processClick(R.drawable.repartiteur4));

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 2020-11-01
    • 2019-07-31
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2016-06-13
    • 1970-01-01
    相关资源
    最近更新 更多