Ситуация аналогична предыдущему реплаю.
Создаю проект:
Мин. версия 10
Целевая 10
Compile With: KitKat 4.4 - иначе визард не позволяет создать Activity
Код урока несколько скорректирован, для обеспечения совместимости с фрагментами и выглядит вот так:
Код: Выделить всё
package ru.yar.tvv.menuadv;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
static TextView tv;
static CheckBox chb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment())
.commit();
}
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment {
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
// находим эдементы
tv = (TextView) rootView.findViewById(R.id.textView);
chb = (CheckBox) rootView.findViewById(R.id.chbExtMenu);
return rootView;
}
}
// создание меню
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
// добавляем пункты меню
menu.add(0, 1, 0, "add");
menu.add(0, 2, 0, "edit");
menu.add(0, 3, 3, "delete");
menu.add(1, 4, 1, "copy");
menu.add(1, 5, 2, "paste");
menu.add(1, 6, 4, "exit");
return super.onCreateOptionsMenu(menu);
}
// обновление меню
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
Log.d("MyLog","пункты меню с ID группы = 1 видны, если в CheckBox стоит галка");
menu.setGroupVisible(1, chb.isChecked());
return super.onPrepareOptionsMenu(menu);
}
// обработка нажатий
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
StringBuilder sb = new StringBuilder();
// Выведем в TextView информацию о нажатом пункте меню
sb.append("Item Menu");
sb.append("\r\n groupId: " + String.valueOf(item.getGroupId()));
sb.append("\r\n itemId: " + String.valueOf(item.getItemId()));
sb.append("\r\n order: " + String.valueOf(item.getOrder()));
sb.append("\r\n title: " + item.getTitle());
tv.setText(sb.toString());
return super.onOptionsItemSelected(item);
}
}
На выходе имею две проблемы:
1. Меня выглядит как-то криво, совсем не так, как в иллюстрациях к урокам, см. скрин 1.
2. Состояние галки не влияет на содержимое меню. OnPrepeareOptionsMenu отрабатывает только один раз, при запуске проекта, но не отрабатывает каждый раз перед показом меню, как ожидается. См. скрин 2. Галочка включена, но меню без изменений.
Буду благодарен, если кто-то объяснит причины такого поведения. И способы все таки обновлять меню перед открытием. Заранее спасибо.