[英]Wrong 1st Argument Type Error on "this" in Fragment Array
我幾乎完成了我的應用程序,當我意識到必須使用片段而不是活動來在所有活動中擁有相同的導航菜單時,我正在做導航菜單。 所以現在,我目前正在復制、粘貼和使活動 java 在片段 java 中工作。 在我的設置頁面上,我有一個允許您選擇語言的微調器。 但是,部分代碼有一個錯誤,我似乎無法弄清楚。 非常感謝所有幫助! 謝謝你!
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); } }
您需要一個上下文來從資源創建 ArrayAdapter。 Fragment 類沒有自己的上下文,而是取決於托管它的 Activity。 因此,您需要從 Fragment 所在的 Activity 傳入上下文。
這應該讓你排序,
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(),
R.array.lang_array, android.R.layout.simple_spinner_item);
希望這會有所幫助,Happin 編碼!
發布這個其他答案來回答您的微調器而不改變語言問題。
簡而言之,您還沒有告訴 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) {...
這兩件事有助於允許/讓 Fragment 處理單擊項目時要執行的操作。 最后,我們需要告訴 Spinner 點擊將由 Fragment 處理。
Spinner langspinner = (Spinner) view.findViewById(R.id.settings_language_spinner);
langspinner.setOnItemSelectedListener(this);
這有助於 Spinner 將項目選擇的處理“委托”給 Fragment。
希望這可以幫助。 快樂編碼!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.