2016-01-20 11 views
8

के बाद नेविगेशन दृश्य मेनू ताज़ा करें मैं प्रोग्रामल रूप से खंडन से स्थानीय रूप से बदल रहा हूं और सबकुछ ठीक है। एक अपवाद है, नेविगेशन व्यू मेनू, जहां भाषा बदल नहीं रही है। सभी गतिविधियों को फिर से बनाने के बिना इसे रीफ्रेश कैसे करें।बदलें लोकेल

MainActivity कोड

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    context = this; 


    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    navigationView.setNavigationItemSelectedListener(this); 
    navigationView.setEnabled(false); 

    DrawerLayout mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    mDrawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); 
} 

R.layout.activity_main

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" android:layout_height="match_parent" 
     android:fitsSystemWindows="true" tools:openDrawer="start"> 

      <include layout="@layout/app_bar_main" android:layout_width="match_parent" 
       android:layout_height="match_parent" /> 

     <android.support.design.widget.NavigationView android:id="@+id/nav_view" 
      android:layout_width="wrap_content" android:layout_height="match_parent" 
      android:layout_gravity="start" android:fitsSystemWindows="true" 
      app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer"/> 

    </android.support.v4.widget.DrawerLayout> 

टुकड़ा कोड के बाद स्थान का चयन

LocaleHelper.setLocale(getActivity(), getResources().getStringArray(R.array.locale)[locale]); 

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.detach(this).attach(this).commit(); 

<group android:checkableBehavior="single"> 
    <item android:id="@+id/nav_contacts" android:icon="@drawable/ic_people_black_24dp" 
     android:title="@string/contacts" android:checked="true"/> 
    <item android:id="@+id/nav_invoices" android:icon="@drawable/ic_swap_horiz_black_24dp" 
     android:title="@string/invoices" /> 
    <item android:id="@+id/nav_payments" android:icon="@drawable/ic_payment_black_24dp" 
     android:title="@string/payments" /> 
    <item android:id="@+id/nav_history" android:icon="@drawable/ic_receipt_black_24dp" 
     android:title="@string/history" /> 
    <item android:id="@+id/nav_settings" android:icon="@drawable/ic_settings_black_24dp" 
     android:title="@string/settings" /> 
    <item android:id="@+id/nav_info" 
       android:title="@string/info" android:icon="@android:drawable/ic_dialog_info"/> 
</group> 

Thanx

+0

आप अपने नौसेना के दराज को कैसे पॉप्युलेट कर रहे हैं? सूची या साधारण दृश्य आइटम। – theJango

+0

मेनू लेआउट से आइटम – koa73

उत्तर

2

मैं इस समस्या

private void refreshNavigationView(){ 

    getActivity().setContentView(R.layout.activity_main); 
    NavigationView navigationView = (NavigationView) getActivity().findViewById(R.id.nav_view); 

} 

कि परिवर्तन स्थान

के बाद ताज़ा NavigationView लिए enought है तय कर लिया है लेकिन मैं MainActivity

पर
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the locale has changed 
    if (!currentLocale.equals(newConfig.locale)) { 
     currentLocale = newConfig.locale; 

     this.setContentView(R.layout.activity_main); 
     NavigationView navigationView = (NavigationView) this.findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(MainActivity.this); 
    } 
} 

onNavigationItemSelected खो नतीजतन

खंड पर

getActivity().onConfigurationChanged(getActivity().getResources().getConfiguration()); 
0

आप नीचे दिए गए कोड की कोशिश कर सकते हैं। मैंने इसका परीक्षण नहीं किया है, लेकिन मुझे उम्मीद है कि यह काम करेगा।

for (int i = 0, count = navigationView.getChildCount(); i < count; i++) { 
    final View child = navigationView.getChildAt(i); 
    if (child != null && child instanceof ListView) { 
     final ListView menuView = (ListView) child; 
     final HeaderViewListAdapter adapter = (HeaderViewListAdapter) menuView.getAdapter(); 
     final BaseAdapter wrapped = (BaseAdapter) adapter.getWrappedAdapter(); 
     wrapped.notifyDataSetChanged(); 
    } 
} 
+0

दुर्भाग्य से काम नहीं करते – koa73

+0

wrapped.getCount() वापस 6 यह सच है, मैं मेनू पर 6 आइटम रखता हूं, लेकिन सूचित करता हूंडेटाट चेंज() मेनू रीफ्रेश नहीं करता है या नया लोकेल नहीं समझता – koa73

+0

मैंने यह किया है: । (navigationView.getMenu()) addSubMenu ("xxx"); इसने नई वस्तु का विज्ञापन किया, लेकिन स्थानीय नहीं बदला – koa73

संबंधित मुद्दे