@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
}
我如何简化此声明有5个视图如果调用一个视图我们必须将白色背景设置为其他视图与白色Bg
编辑:
{{1}}
这些可能有助于回答我总是尝试优化我的代码但是像这样的一些陈述会使丑陋的重复块
答案 0 :(得分:1)
由于你的逻辑的关键是“设置所有视图的背景,除了被调用的视图之外”为什么不尝试
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.
答案 1 :(得分:-1)
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);
}
}
}
答案 2 :(得分:-1)
您在哪里为所选项目设置颜色?是否可以将所有颜色设置为白色,然后使用开关将所选颜色设置为所需颜色? 它会让你至少看起来更愉快。
nav_news_bg.setBackground(color);
nav_feed_bg.setBackground(color);
nav_profile_bg.setBackground(color);
nav_chat_bg.setBackground(color);
nav_books_bg.setBackground(color);
switch(v.getId()){
case R.id.nav_news:
nav_news_bg.setBackground(desiredColor);
break;
case R.id.nav_feed:
.
.
.
}
编辑完成后,最好从干净处删除任何逻辑,并将其保留为
private void clean(View v) {
ColorDrawable color = new ColorDrawable(ContextCompat.getColor(this,R.color.white));
nav_news_bg.setBackground(color);
nav_feed_bg.setBackground(color);
nav_profile_bg.setBackground(color);
nav_chat_bg.setBackground(color);
nav_books_bg.setBackground(color);
}
因为在执行此方法后设置了背景颜色。