私は言語スピナーを持っていて、それぞれの言語を選択すると、set.locale
でアプリの言語が変わります。しかし、スピナー内の要素をクリックすると無限ループが発生し、言語変更後のアクティビティが常に最新の状態に更新されます。私は、アイテムが選択されたときに、選択されたアイテムを無制限に読み込むと思います。エラーとは何ですか?問題の解決方法は? ユーザーが選択を行う際にスピナーから項目を選択している間に無限ループ
package com.example.mher.citygo;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import java.util.ArrayList;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
String[] items;
private static final int REQUEST_CALL=1;
ArrayList<String> listItems;
ArrayAdapter<String> adapter;
ListView listView;
EditText editText;
Button bregister;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<ItemData> list=new ArrayList<>();
list.add(new ItemData("Eng",R.drawable.usaflag));
list.add(new ItemData("Arm",R.drawable.armeniaflag));
list.add(new ItemData("Ru",R.drawable.russiaflag));
list.add(new ItemData("Per",R.drawable.iranflag));
Spinner sp=(Spinner) findViewById(R.id.spinner);
SpinnerAdapter adapter=new SpinnerAdapter(this,R.layout.spinner_layout,R.id.txt,list);
sp.setAdapter(adapter);
sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if(position==0)
setLocale("ru");
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
final Button SearchARid=(Button) findViewById(R.id.bSearchRide);
Button LoginDriver=(Button) findViewById(R.id.bLogin_As_A_Driver);
bregister=(Button) findViewById(R.id.bRegister);
bregister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent SignUp=new Intent(MainActivity.this,RegisterActivity.class);
MainActivity.this.startActivity(SignUp);
}
});
LoginDriver.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent DriverLogin=new Intent(MainActivity.this,LoginActivity.class);
MainActivity.this.startActivity(DriverLogin);
}
});
SearchARid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent SearchRide=new Intent(MainActivity.this, SearchRide.class);
MainActivity.this.startActivity(SearchRide);
}
});
}
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);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
}
}
どうすればいいですか? –
@ KarenMkhitaryan:最初は 'true'に設定された' boolean'フィールド(例えば、 'isFirstEvent')を使うことができます。 'onItemSelected()'メソッドで、 'boolean'をチェックし、それが最初のイベントかどうかを確認してください。 – CommonsWare
あなたのソリューションは正しいですが、そうして別のアイテムを選択してから最初のアイテムを選択すると、最初のアイテムは機能しません –