Seticon на sherlockactionbar при загрузке с другого метода?

У меня есть карта содержимого java, я уже добавил новые элементы в правой части панели действий, элемент показывает загрузку при загрузке карты при oncreate..

Я хочу изменить menuitem на значок при загрузке карты. Здесь мой код для загрузки элементов.

public boolean onCreateOptionsMenu(Menu menu) {
 boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light;
 menu.add("Icon").setActionView(R.layout.loading_lingkaran_kecil)
 .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

 return true;
 }



@Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.mapv2_main_activity);
 googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
 public void onMapLoaded() {
 Toast.makeText(getApplicationContext(), "map has loaded", Toast.LENGTH_SHORT).show();
 //here to make items stop show loading and change icon,but nothing happend with this code
 getSupportActionBar().getTabAt(0).setIcon(R.drawable.ico_member);


 }
 });
}

заранее спасибо

1 ответ

Вам нужно иметь логический флаг, чтобы проверить, была ли сделана загрузка или нет, и вызвать invalidateOptionsMenu чтобы обновить ваш onCreateOptionsMenu, удалив старый значок и заменив его новым OptionMenu в OptionMenu.

образец:

boolean doneLoading = false; //a global instance of the flag
@Override
public boolean onCreateOptionsMenu(Menu menu) {
 if(!doneLoading)
 menu.add("Icon").setActionView(R.layout.loading_lingkaran_kecil).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
 else
 {
 menu.removeItem(R.layout.loading_lingkaran_kecil); //will remove the old icon after the loading is done
 menu.add("Icon").setActionView(R.layout.you_new_layout_after_loading).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
 }
 return true;
}

И в вашем onMapLoadedCallback вам нужно обновить пункты меню на панели действий, установив флаг в true.

googleMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();

googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
 public void onMapLoaded() {
 Toast.makeText(getApplicationContext(), "map has loaded", Toast.LENGTH_SHORT).show();

 doneLoading = true; //set to true means it is done loading
 invalidateOptionsMenu(); //refresh the optionsmenu

 }
 });

licensed under cc by-sa 3.0 with attribution.