2013-08-09 3 views
2

У меня есть три вида деятельности. Основная деятельность, настройки Активность и настройка деятельностиНазвание панели действий исчезает после воссоздания активности

Главное открывает настройки, открывающие программу установки.

В настройки деятельности я позволяю Изменить язык пользователя, которые будут храниться в SharedPreferences

В Main и настройки у меня есть слушателя для изменения SharedPreference.

об изменении я воссоздаю эти действия (Основное и настройки). Весь текст находится на новом языке, но заголовок панели действий исчез и снова появляется (на правильном языке) после поворота устройства. Это не работает, чтобы установить заголовок с помощью setTitle, а getTitle возвращает правильный текст. Это просто невидимо.

Любые идеи о том, как заставить заголовок ActionBar отображаться без поворота устройства?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    ctx = getBaseContext(); 

    Language.loadLocale(ctx); 
    setContentView(R.layout.activity_main); 
    act = this; 
    // Set up the action bar. 
    final ActionBar actionBar = getActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 


    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

    mViewPager = (ViewPager) findViewById(R.id.pager); 
    mViewPager.setAdapter(mSectionsPagerAdapter); 


    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
     @Override 
     public void onPageSelected(int position) { 
      actionBar.setSelectedNavigationItem(position); 
      activeTab = position; 
     } 
    }); 


    actionBar.addTab(
      actionBar.newTab() 
        .setText(R.string.title_tab1_active_order_name) 
        .setTabListener(this)); 

    actionBar.addTab(
      actionBar.newTab() 
        .setText(R.string.title_tab2_history_name) 
        .setTabListener(this)); 

    actionBar.addTab(
      actionBar.newTab() 
        .setText(R.string.title_tab3_tools_name) 
        .setTabListener(this)); 

    listenOnLangChange(); 


} 

private void listenOnLangChange(){ 
    //handles language changes 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 

    listener = new SharedPreferences.OnSharedPreferenceChangeListener() { 
     public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
      // Implementation 
      if (key.equals("setLanguageKey")){ 
       Configuration config = Language.loadLocale(ctx); 
       onConfigurationChanged(config); 
      } 
     } 
    }; 

    prefs.registerOnSharedPreferenceChangeListener(listener); 
} 

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    act.recreate(); 
} 

От языка класса:

public static Configuration changeLang(String lang, Context ctx) 
{ 

    String languageToLoad = lang; // your language 
    Locale locale = new Locale(languageToLoad); 

    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 

    ctx.getResources().updateConfiguration(config, 
      ctx.getResources().getDisplayMetrics()); 

    Log.d("CHANGE", languageToLoad); 

    return config; 
} 


public static Configuration loadLocale(Context ctx) 
{ 
    String langPref = "setLanguageKey"; 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ctx); 
    String language = prefs.getString(langPref, ""); 
    Log.d("LOAD", language); 

    return changeLang(language, ctx); 
} 
+0

Может быть, поставить 'android: showAsAction =" always "' в xml этого? – g00dy

+0

Можете ли вы разместить свой onCreate()? чувствует, что есть некоторые проблемы с построением View – bofredo

+0

У меня есть меню с тремя элементами, которые имеют showAsAction = "always" на них. Они корректно обновляются с новым языком. К сожалению, это просто название, которое исчезает. –

ответ

1

Я должен был решить его с помощью настраиваемого представления добавляется в панель действий. Это работает, но, возможно, не лучшее решение.

public static void setActionbarTitle(Activity act, String title){ 
    ActionBar actionBar = act.getActionBar(); 

    actionBar.setDisplayShowCustomEnabled(true); 
    actionBar.setDisplayShowTitleEnabled(false); 

    LayoutInflater inflator = (LayoutInflater) act.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View v = inflator.inflate(R.layout.actionbar_title_layout, null); 

    TextView tv = (TextView) v.findViewById(R.id.tv_actionbar_title); 
    tv.setText(title); 
    tv.setTextColor(Color.WHITE); 

    actionBar.setCustomView(v); 
} 
Смежные вопросы