Я пытаюсь установить разные MenuItems
на каждое из вкладок моего приложения (вкладки навигации ActionBar). Я пробовал много решений, но последнее кажется самым близким. Когда я открываю свое приложение, он скрывает мой MenuItem
, но когда я прокручиваю второй фрагмент, он не показывает MenuItem
, несмотря на то, что ive установил, что он должен быть видимым.Настройка видимости проблемы с MenuItems
У вас есть идея, как это решить?
Смотрите мой код ниже (пожалуйста, проверьте в основном заявления возле нот «Здесь»):
public class MainActivity extends ActionBarActivity{
ProgressBar mProgressBar;
EditText mEditText;
RelativeLayout mRelativeLayout;
ProgressBar oProgressBar;
LinearLayout mLinearLayout;
ViewPager mPager;
ActionBar mActionBar;
Menu mMenu;
Tab mTab;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Parse.initialize(this, "code", "code");
ParseObject.registerSubclass(Animal.class);
ParseAnalytics.trackAppOpened(getIntent());
Log.v("Initialize", "intitalizing from Parse.com app");
mActionBar = getSupportActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mPager = (ViewPager) findViewById(R.id.pager);
ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
mActionBar.setSelectedNavigationItem(position);
}
};
FragmentManager fm = getSupportFragmentManager();
mPager.setOnPageChangeListener(ViewPagerListener);
ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);
mPager.setAdapter(viewpageradapter);
ActionBar.TabListener tabListener = new ActionBar.TabListener() {
@Override
public void onTabReselected(Tab mTab, FragmentTransaction arg1) {
// TODO Auto-generated method stub
}
@Override
public void onTabSelected(Tab mTab, FragmentTransaction arg1) {
mPager.setCurrentItem(mTab.getPosition());
mPager.setOffscreenPageLimit(3);
supportInvalidateOptionsMenu(); //Here
}
@Override
public void onTabUnselected(Tab mTab, FragmentTransaction arg1) {
// TODO Auto-generated method stub
supportInvalidateOptionsMenu();
}
};
ActionBar.Tab Animals = mActionBar.newTab().setText("Animals");
ActionBar.Tab Frag2Tab = mActionBar.newTab().setText("Favorites");
ActionBar.Tab Frag3Tab = mActionBar.newTab().setText("Settings");
Animals.setTabListener(tabListener);
Frag2Tab.setTabListener(tabListener);
Frag3Tab.setTabListener(tabListener);
mActionBar.addTab(Animals);
mActionBar.addTab(Frag2Tab);
mActionBar.addTab(Frag3Tab);
}
@Override
public void onDestroy(){
System.exit(0);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
Fragment1 frg1 = new Fragment1();
Fragment2 frg2 = new Fragment2();
Fragment3 frg3 = new Fragment3();
try {
if(frg1.isMenuVisible()){
menu.findItem(R.id.action_refresh).setEnabled(false) .setTitle("").setIcon(null);
Log.v("fdsfad", "sadfasdfsa");
}
else if (frg2.isMenuVisible()){
menu.findItem(R.id.action_refresh).setEnabled(true) .setTitle("Refresh").setIcon(R.drawable.ic_action_refresh);
Log.v("fdsfad", "sadfasdfsa");
}
else if (frg3.isMenuVisible()){
menu.findItem(R.id.action_refresh).setEnabled(true) .setTitle("Refresh").setIcon(R.drawable.ic_action_refresh);
Log.v("fdsfad", "sadfasdfsa");
}
} catch (Exception e) {
e.printStackTrace();
}
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_refresh:
Toast.makeText(getBaseContext(), "Pull to refresh", Toast.LENGTH_SHORT).show();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public boolean onKeyDown (int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH) {
Toast.makeText(this, "Search button: clicked", Toast.LENGTH_SHORT).show();
}
return super.onKeyDown(keyCode, event);
}
}
Спасибо заранее!
Thans for a reply. Ive попробовал первое решение, но оно не работает. Как мне его раздуть? – marson
Для первого решения: Вместо строки 'menu.findItem (R.id.action_refresh) .setVisible (false)' make 'menuItem.setEnable (false)', 'menuItem.setTitle (" ")', 'menuItem. SetIcon (нуль) '. и если вы хотите показать элемент, сделайте противоположное так, чтобы setEnable true, setIcon с изображением и setTitle с вашим значением названия. –
Ive попробовал, и он все тот же – marson