2017-02-05 8 views
2

すべての画面で同じナビゲーションメニューを共有するために、アクティビティではなくフラグメントを使用する必要があることがわかったとき、私のアプリケーションはほぼ完全に完了しました。今では、私はすべてのアクティビティJavaコードを作成しています断片的に私が理解できないような1つの問題は、言語を変えるスピナーです。英語(デフォルト)、スペイン語(スペイン語)、フランス語(フランス語)の文字列を作成して翻訳しました。誰かがスピナーでスペイン語を選択すると、アプリのロケールをスペイン語(&)に変更して、言語をスペイン語に変更したと言うトーストをします。これを行うには、フラグメントを再起動する必要がありますか?ですから、言語の更新のために設定フラグメントから設定フラグメントを開始しますか?今、私がスピナーからオプションを選択すると、スピナーでそれを選択したことがわかりますが、何も起こりません。トースト、言語、フラグメントのリフレッシュなどはありません。すべてのヘルプは非常に高く評価されています!ありがとうございました!!私は以下のコードを投稿します!アプリケーションの言語を変更するスピナー(断片内)の作成方法

package com.ezeapplications.quikflipfinal; 
 

 

 
import android.content.Intent; 
 
import android.content.res.Configuration; 
 
import android.content.res.Resources; 
 
import android.os.Bundle; 
 
import android.support.annotation.Nullable; 
 
import android.support.v4.app.Fragment; 
 
import android.support.v4.app.FragmentActivity; 
 
import android.support.v4.app.FragmentTransaction; 
 
import android.util.DisplayMetrics; 
 
import android.view.LayoutInflater; 
 
import android.view.View; 
 
import android.view.ViewGroup; 
 
import android.widget.AdapterView; 
 
import android.widget.ArrayAdapter; 
 
import android.widget.Button; 
 
import android.widget.Spinner; 
 
import android.widget.Toast; 
 

 
import java.util.Locale; 
 
import java.util.Set; 
 

 

 
/** 
 
* A simple {@link Fragment} subclass. 
 
*/ 
 
public class SettingsFragment extends Fragment implements View.OnClickListener, AdapterView.OnItemSelectedListener { 
 

 
    public SettingsFragment() { 
 
     // Required empty public constructor 
 
    } 
 

 
    @Override 
 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
 
     View view = inflater.inflate(R.layout.fragment_settings, container, false); 
 
     Button settupdatebtn = (Button) view.findViewById(R.id.setting_update_btn); 
 
     settupdatebtn.setOnClickListener(this); 
 

 
     Spinner langspinner = (Spinner) view.findViewById(R.id.settings_language_spinner); 
 
     // Create an ArrayAdapter using the string array and a default spinner layout 
 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), 
 
       R.array.lang_array, android.R.layout.simple_spinner_item); 
 
     // Specify the layout to use when the list of choices appears 
 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
 
     // Apply the adapter to the spinner 
 
     langspinner.setAdapter(adapter); 
 
     return view; 
 
    } 
 

 
    @Override 
 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
 

 
     Spinner langspinner = (Spinner) view.findViewById(R.id.settings_language_spinner); 
 
     langspinner.setOnItemSelectedListener(this); 
 

 
     if (pos == 1) { 
 

 
      Toast.makeText(parent.getContext(), 
 
        "You Have Selected English!", Toast.LENGTH_SHORT) 
 
        .show(); 
 
      setLocale("en"); 
 
      SettingsFragment fragmenten = new SettingsFragment(); 
 
      android.support.v4.app.FragmentTransaction fragmentTransactionen = 
 
        getActivity().getSupportFragmentManager().beginTransaction(); 
 
      fragmentTransactionen.replace(R.id.fragment_container, fragmenten); 
 
      fragmentTransactionen.commit(); 
 
      langspinner.setSelection(1); 
 

 
     } else if (pos == 2) { 
 

 
      Toast.makeText(parent.getContext(), 
 
        "Has Seleccionado Español!", Toast.LENGTH_SHORT) 
 
        .show(); 
 
      setLocale("es"); 
 
      SettingsFragment fragmentes = new SettingsFragment(); 
 
      android.support.v4.app.FragmentTransaction fragmentTransactiones = 
 
        getActivity().getSupportFragmentManager().beginTransaction(); 
 
      fragmentTransactiones.replace(R.id.fragment_container, fragmentes); 
 
      fragmentTransactiones.commit(); 
 
      langspinner.setSelection(2); 
 

 
     } else if (pos == 3) { 
 

 
      Toast.makeText(parent.getContext(), 
 
        "Vous Avez Sélectionné Le Français!", Toast.LENGTH_SHORT) 
 
        .show(); 
 
      setLocale("fr"); 
 
      SettingsFragment fragmentfr = new SettingsFragment(); 
 
      android.support.v4.app.FragmentTransaction fragmentTransactionfr = 
 
        getActivity().getSupportFragmentManager().beginTransaction(); 
 
      fragmentTransactionfr.replace(R.id.fragment_container, fragmentfr); 
 
      fragmentTransactionfr.commit(); 
 
      langspinner.setSelection(3); 
 
     } 
 
    } 
 

 
    public void onNothingSelected(AdapterView<?> arg0) { 
 
     // TODO Auto-generated method stub 
 
    } 
 

 

 
     @Override 
 
       public void onClick (View v) { 
 
      SettingsFragment fragment = new SettingsFragment(); 
 
      android.support.v4.app.FragmentTransaction fragmentTransaction = 
 
        getFragmentManager().beginTransaction(); 
 
      fragmentTransaction.replace(R.id.fragment_container,fragment); 
 
      fragmentTransaction.commit(); 
 
      Toast.makeText(getActivity(), "Settings Updated!", Toast.LENGTH_SHORT).show(); 
 
     }; 
 

 
    Locale myLocale; 
 
    public void setLocale(String lang) { 
 
     myLocale = new Locale(lang); 
 
     Locale.setDefault(myLocale); 
 
     Resources res = getResources(); 
 
     DisplayMetrics dm = res.getDisplayMetrics(); 
 
     Configuration conf = res.getConfiguration(); 
 
     conf.locale = myLocale; 
 
     res.updateConfiguration(conf, dm); 
 
     refresh(); 
 

 

 
} 
 

 
public void refresh() { 
 
    Fragment currentFragment = getFragmentManager().findFragmentByTag("fragment_tag_String"); 
 
    FragmentTransaction fragTransaction = getFragmentManager().beginTransaction(); 
 
    fragTransaction.detach(currentFragment); 
 
    fragTransaction.attach(currentFragment); 
 
    fragTransaction.commit(); 
 

 
} 
 

 
    }

答えて

0

あなたは自分の断片をデタッチし、つけてもよいです。その後、ビューが更新され、ローカルが変更されます。

Fragment currentFragment = getFragmentManager().findFragmentByTag("FRAGMENT"); 
FragmentTransaction fragTransaction = getFragmentManager().beginTransaction(); 
fragTransaction.detach(currentFragment); 
fragTransaction.attach(currentFragment); 
fragTransaction.commit(); 

このフラグメントを呼び出したMainActivityのSettingsFragmentのfragmentsTagを設定します。 (例:OnNavigationItemSelected()メソッド)。

FragmentManager fm = getFragmentManager(); 
fm.beginTransaction().replace(R.id.content_frame, new YourSettingsFragment(),"Tag").commit(); 
+0

まだ動作しません。いくつかの変更を加えたので、私はポストを更新します。 – CoolBeener

0

これを試してみてください。

public class SettingsFragment extends Fragment implements View.OnClickListener, AdapterView.OnItemSelectedListener { 

    Spinner langspinner; 

    public SettingsFragment() { 
     // Required empty public constructor 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_settings, container, false); 
     Button settupdatebtn = (Button) view.findViewById(R.id.setting_update_btn); 
     settupdatebtn.setOnClickListener(this); 

     langspinner = (Spinner) view.findViewById(R.id.settings_language_spinner); 
     langspinner.setOnItemSelectedListener(this); 
     // Create an ArrayAdapter using the string array and a default spinner layout 
     ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), 
       R.array.lang_array, android.R.layout.simple_spinner_item); 
     // Specify the layout to use when the list of choices appears 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     // Apply the adapter to the spinner 
     langspinner.setAdapter(adapter); 
     langspinner.setSelection(0, false); 
     return view; 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 

     if (pos == 1) { 

      Toast.makeText(parent.getContext(), 
        "You Have Selected English!", Toast.LENGTH_SHORT) 
        .show(); 
      setLocale("en"); 
      langspinner.setSelection(1); 

     } else if (pos == 2) { 

      Toast.makeText(parent.getContext(), 
        "Has Seleccionado Español!", Toast.LENGTH_SHORT) 
        .show(); 
      setLocale("es"); 
      langspinner.setSelection(2); 

     } else if (pos == 3) { 

      Toast.makeText(parent.getContext(), 
        "Vous Avez Sélectionné Le Français!", Toast.LENGTH_SHORT) 
        .show(); 
      setLocale("fr"); 
      langspinner.setSelection(3); 
     } 
    } 

    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 
    } 


    @Override 
    public void onClick(View v) { 
     SettingsFragment fragment = new SettingsFragment(); 
     android.support.v4.app.FragmentTransaction fragmentTransaction = 
       getFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.fragment_container, fragment); 
     fragmentTransaction.commit(); 
     Toast.makeText(getActivity(), "Settings Updated!", Toast.LENGTH_SHORT).show(); 
    } 


    Locale myLocale; 

    public void setLocale(String lang) { 
     myLocale = new Locale(lang); 
     Locale.setDefault(myLocale); 
     Resources res = getResources(); 
     DisplayMetrics dm = res.getDisplayMetrics(); 
     Configuration conf = res.getConfiguration(); 
     conf.locale = myLocale; 
     res.updateConfiguration(conf, dm); 
     refresh(); 


    } 

    public void refresh() { 
     Fragment currentFragment = getFragmentManager().findFragmentByTag("fragment_tag_String"); 
     FragmentTransaction fragTransaction = getFragmentManager().beginTransaction(); 
     fragTransaction.detach(currentFragment); 
     fragTransaction.attach(currentFragment); 
     fragTransaction.commit(); 

    } 

} 

あなたはuがこのようにフラグメントタグ

を追加するには、activityからSettingsFragmentをロードする際に確認してください。

SettingsFragment fragmentA = new SettingsFragment(); 
getSupportFragmentManager().beginTransaction() 
    .replace(R.id.MainFrameLayout,fragmentA,"fragment_tag_String") 
    .addToBackStack(null).commit(); 
+0

まだ動作しません。しかし、いくつかの変更を加えました。私はポストのコードを更新します。 – CoolBeener

+0

@CoolBeener編集された答えを確認してください。 – rafsanahmad007

+0

私はそれを追加しました。そしてスピナーは選択された言語を表示し、それを変更します!唯一の問題は、あなたが言語トーストを更新したことを常に新しくしているという事実です。フェージングが始まるとすぐに新しいものが作られます。ありがとう!!あなたが助けることを願っています! – CoolBeener

関連する問題