Как я могу упростить это заявление Java - PullRequest
0 голосов
/ 05 июня 2018
private void clean(View v) {
    ColorDrawable color = new ColorDrawable(ContextCompat.getColor(this,R.color.white));
    if (v.getId() == R.id.nav_news){
        nav_feed_bg.setBackground(color);
        nav_profile_bg.setBackground(color);
        nav_chat_bg.setBackground(color);
        nav_books_bg.setBackground(color);
    } else if (v.getId() == R.id.nav_feed){
        nav_news_bg.setBackground(color);
        nav_profile_bg.setBackground(color);
        nav_chat_bg.setBackground(color);
        nav_books_bg.setBackground(color);
    } else if (v.getId() == R.id.nav_profile){
        nav_feed_bg.setBackground(color);
        nav_news_bg.setBackground(color);
        nav_chat_bg.setBackground(color);
        nav_books_bg.setBackground(color);
    } else if (v.getId() == R.id.nav_chat){
        nav_feed_bg.setBackground(color);
        nav_profile_bg.setBackground(color);
        nav_news_bg.setBackground(color);
        nav_books_bg.setBackground(color);
    } else if (v.getId() == R.id.nav_books){
        nav_feed_bg.setBackground(color);
        nav_profile_bg.setBackground(color);
        nav_chat_bg.setBackground(color);
        nav_news_bg.setBackground(color);
    }
}

Как я могу упростить это утверждение? Есть 5 видов, если вызывается один вид. Мы должны установить белый фон для других видов с белым цветом Bg

Редактировать:

    @Override
    public void onClick(View v) {
        Drawable shadow;
        switch (v.getId()) {
            case R.id.nav_news:
                Utils.sToast(this, "NavBar Item Clicked 1");
                shadow = getDrawable(R.drawable.shadow_bg_nav);
                clean(v);
                nav_news_bg.setBackground(shadow);
                break;
            case R.id.nav_feed:
                Utils.sToast(this, "NavBar Item Clicked 2");
                shadow = getDrawable(R.drawable.shadow_bg_nav);
                clean(v);
                nav_feed_bg.setBackground(shadow);
                break;
            ... Other Statements Here
}

Они могут быть полезны для ответов. Я всегда стараюсь оптимизировать свой код, но некоторые подобные заявления делают уродливые повторяющиеся блоки

Ответы [ 3 ]

0 голосов
/ 05 июня 2018
Map<Integer, View> views = new HashMap();
public void MyClass() {
   init();
   views.put(R.id.nav_news, nav_news_bg);
   views.put(R.id.nav_profile, nav_profile_bg);
   // etc
}
private void clean(View v) {
    Colour colour = ... 
    for (Map.Entry entry : views) {
       if (!entry.getKey().equals(v.getId()) {
           entry.getValue().setbackground(color);
       } 
   } 
} 
0 голосов
/ 05 июня 2018

Где Вы устанавливаете цвет для выбранного элемента?Можно ли установить все цвета на белый, а затем с помощью переключателя установить только выбранный цвет на нужный?На это было бы как минимум приятнее смотретьцвет устанавливается после выполнения этого метода.

0 голосов
/ 05 июня 2018

Поскольку суть вашей логики заключается в "задании фона всех представлений, кроме того, который называется" Почему бы не попробовать

if (v.getId() != R.id.nav_news) nav_feed_news.setBackground(color);
if (v.getId() != nav_feed) nav_feed.setBackground(color);
// and so on for the rest.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...