我刚刚学习到通过Handler更新Android组件的事情,只是想要通过点击ImageView来在更新Fragment的同时让下方的Tab背景色有所改变。我想通过handle来更新的,代码如下:
public class administrator extends Activity {
LinearLayout layout_monitoring;
LinearLayout layout_message;
LinearLayout layout_admin;
LinearLayout layout_setting;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.administrator);
ImageView image_monitoring=(ImageView) findViewById(R.id.image_monitoring);
ImageView image_message=(ImageView) findViewById(R.id.image_message);
ImageView image_admin=(ImageView) findViewById(R.id.image_admin);
ImageView image_setting=(ImageView) findViewById(R.id.image_setting);
layout_monitoring=(LinearLayout) findViewById(R.id.layout_monitoring);
layout_message=(LinearLayout) findViewById(R.id.layout_message);
layout_admin=(LinearLayout) findViewById(R.id.layout_admin);
layout_setting=(LinearLayout) findViewById(R.id.layout_setting);
image_monitoring.setOnClickListener(image_click);
image_message.setOnClickListener(image_click);
image_admin.setOnClickListener(image_click);
image_setting.setOnClickListener(image_click);
FragmentManager fragmentManager =getFragmentManager();
FragmentTransaction ft =fragmentManager.beginTransaction();
Fragment f=new administrator_monitoring_fragment();
ft.replace(R.id.fragment,f);
ft.commit();
}
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.arg1)
{
case 1:
{
layout_monitoring.setBackgroundResource(R.color.choose);
layout_message.setBackgroundResource(R.color.choose_not);
layout_admin.setBackgroundResource(R.color.choose_not);
layout_setting.setBackgroundResource(R.color.choose_not);
}break;
case 2:
{
layout_monitoring.setBackgroundResource(R.color.choose_not);
layout_message.setBackgroundResource(R.color.choose);
layout_admin.setBackgroundResource(R.color.choose_not);
layout_setting.setBackgroundResource(R.color.choose_not);
}break;
case 3:
{
layout_monitoring.setBackgroundResource(R.color.choose_not);
layout_message.setBackgroundResource(R.color.choose_not);
layout_admin.setBackgroundResource(R.color.choose);
layout_setting.setBackgroundResource(R.color.choose_not);
}break;
case 4:
{
layout_monitoring.setBackgroundResource(R.color.choose_not);
layout_message.setBackgroundResource(R.color.choose_not);
layout_admin.setBackgroundResource(R.color.choose_not);
layout_setting.setBackgroundResource(R.color.choose);
}break;
}
Message newMsg=new Message();
newMsg.arg1=msg.arg1;
msg=newMsg;
handler.sendMessage(msg);
}
};
View.OnClickListener image_click=new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager =getFragmentManager();
FragmentTransaction ft =fragmentManager.beginTransaction();
Fragment f=null;
int choose_fragment=0;
switch(v.getId())
{
case R.id.image_monitoring:
f=new administrator_monitoring_fragment();
choose_fragment=1;
break;
case R.id.image_message:
f=new administrator_message_fragment();
choose_fragment=2;
break;
case R.id.image_admin:
f=new administrator_admin_fragment();
choose_fragment=3;
break;
case R.id.image_setting:
f=new administrator_setting_fragment();
choose_fragment=4;
break;
default:
choose_fragment=0;
break;
}
Message msg=handler.obtainMessage();
msg.arg1=choose_fragment;
handler.sendMessage(msg);
ft.replace(R.id.fragment,f);
ft.commit();
}
};
}
但是我在APP里发现有的时候会更新失败,只是更新了fragment并没有改变tab的背景色。
难道是操作耗时所以导致message还没有来得及做完就以为受到新的message而中途失败了?