2

私はほとんどすべてのアプリケーションを完了していましたが、最後にナビゲーションメニューを実行していました。今、私は現在、断片的なJavaでコピー、貼り付け、アクティビティJavaの作業を行っています。私の設定ページには、言語を選択できるスピナーがあります。しかし、コードの一部にエラーがあり、わからないようです。すべてのヘルプは非常に感謝しています!ありがとうございました!フラグメント配列内の "this"に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.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(); 
 
     }; 
 

 
public void setLocale(String lang) { 
 

 
     Locale myLocale = new Locale(lang); 
 
     Resources res = getResources(); 
 
     DisplayMetrics dm = res.getDisplayMetrics(); 
 
     Configuration conf = res.getConfiguration(); 
 
     conf.locale = myLocale; 
 
     res.updateConfiguration(conf, dm); 
 
     } 
 

 
    }

+0

ここにエラーを投稿できますか?それがなければ、誰もウルの問題を特定することはできません。 –

+0

私は誤ってタグやコードを追加するのではなく、質問を投稿しました。私はそれを計画していたが、間違ってすぐに投稿したので、質問を編集しなければならなかった。コードはここにあります! – EyeNeedSumHelp

答えて

1

あなたは資源からArrayAdapterを作成するためのコンテキストを必要としています。 Fragmentクラスは独自のコンテキストを持たず、むしろそれがホストされているアクティビティに依存します。したがって、あなたのフラグメントが存在するアクティビティからコンテキストを渡す必要があります。

これは、あなたが並べ替えられている必要があり、

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), 
       R.array.lang_array, android.R.layout.simple_spinner_item); 

希望は、このHappinコーディング、役立ちます!

+0

ありがとう!私は離れて行くというエラーが出てきましたが、言語を変更することはありません。スペイン語(ES)とフランス語(FR)のstrings.xmlファイルを作成しました。問題ではないはずです。スピナーの選択を変更しても私のトーストはポップアップしません。あなたが助けることを願っています!ありがとう! – EyeNeedSumHelp

+0

変更が必要なことがいくつかありますので、コメントに続けて別の回答を追加すると思います。また、この回答があなたのために働いた場合は、これをアップヴォーグし、これを受け入れられた回答としてください。ありがとう! –

0

言語の問題を変更しないで、この他の回答を投稿してスピンナーにお答えください。

要するに、アイテムが選択されたときにSpinnerにどこに行かないかを伝えていません。あなたはそれを処理するコードを書いていますが、Spinnerにリンクしていません。

最初の変更自分のクラスの先頭に次の行、

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

あなたは、Android Studioが自動インポートされない場合に備え、ファイルの先頭にこのインポートが必要になり、

import android.widget.AdapterView.OnItemSelectedListener; 

次はあなたが、このようなonItemSelectedメソッドに注釈を追加する必要が

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

これらの2つの機能は、アイテムがクリックされたときに何をするかをフラグメントが処理することを許可/許可するのに役立ちます。最後に、Spinnerにクリックがフラグメントによって処理されることを伝える必要があります。

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

これは、Spinnerがアイテム選択の処理をフラグメントに「委任」するのに役立ちます。

これが役に立ちます。ハッピーコーディング!

+0

onitemselectedlistenerを実装してインポートし、onitemselectedにオーバーライドを追加し、他の2行のコードを追加しましたが、それでも動作しません。:(言語が変更される前と同じように、設定アクティビティ自体がリフレッシュされません)スピナーオプションを選択したときに、開いている設定アクティビティが表示されるはずですか?アクティビティについては、画面をリフレッシュすることができます。 ! – EyeNeedSumHelp

+0

あなたはトーストを少なくとも見ることができますか? –

+0

英語、スペイン語などを選択したということは全く言いません。 – EyeNeedSumHelp

関連する問題