Я новичок в Андроиде , и во время разработки у меня возникла проблема с сохранением AndroidSpinner
при повороте єкрана
В моем приложениие есть 2 SpinnerAdapter
которые заполняю тся парами из ArrayAdapter<String>
.
В методе onCreate
создается 4 (в будущем их будет немного больше) адаптера для них. Дальше когда пользователь нажимает button1
или button2
то spinnerFrom
и spinnerTo
заполняются adapter1
and adapter2
, дальше используя Radiogroup
пользователь выбирает какой из двух адаптеров он хочет видеть в AndroidSpinner
.
Для сохранения статуса UI при повороте я в методе onSavedInstance
написал след. код
savedInstanceState.putInt("from",spinnerFrom.getSelectedItemPosition);
savedInstanceState.putInt("to",spinnertTo.getSelectedItemPosition());
а в методе OnRestoreIstanceState я передаю значения из onSavedInstance для его востановления
spinnerFrom.setSelection(savedInstanceState.getInt("from"));
spinnertTo.setSelection(savedInstanceState.getInt("to"));
Но вот в чем проблема : когда приложение восстанавливается, адаптеры принимают значение null, так как метод setAdapter вызывается после нажатия на кнопку и соответственно в методе onCreate они попросту null Для провери этого была создана техническая кнопка и метод под нее :
protected void checkAdapter () {
//get Adapter from spinners
SpinnerAdapter valueAdapter = spinnerFrom.getAdapter();
SpinnerAdapter resultAdapter = spinnertTo.getAdapter();
if (valueAdapter == null | resultAdapter== null) {
Toast.makeText(this, “adapter null” , Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(this, “adapters not null” , Toast.LENGTH_SHORT).show();
}
}
Вопрос : Как правильно сохранить AdroidSpinner
и его адаптер используя OnSavedInstance
а затем востановить его в onRestoreInstance
когда спиннеры заполняются не в onCreate
, а динамически ?
Спасибо зарание !
Java code:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity {
protected double getEnteredValue;
protected SpinnerAdapter checkAdapter;
protected int pos;
protected ArrayAdapter<String> adapter 1, adapter2, adapter3,
adapter4;
//butterknife bindings
@BindView(R.id.unit_From_spinner)Spinner spinnerFrom;
@BindView(R.id.unit_To_spinner)Spinner spinnertTo;
@BindView(R.id.radio_result_group) RadioGroup resultGroup;
@BindView(R.id.radio_value_gropu) RadioGroup valueGroup;
@BindView(R.id.valueEditTextView) EditText valueEdit;
@BindView(R.id.resultView) TextView resultView;
@BindView(R.id.conver_button) Button convertButton;
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putString("result",resultView.getText().toString()); savedInstanceState.putString("value",valueEdit.getText().toString()); savedInstanceState.putInt("from",spinnerFrom.getSelectedItemPosition);
savedInstanceState.putInt("to",spinnertTo.getSelectedItemPosition());
savedInstanceState.putInt("radGroup1",resultGroup.getCheckedRadioButtonId());
savedInstanceState.putInt("radGroup2", valueGroup.getCheckedRadioButtonId());
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.unifiedlayout);
ButterKnife.bind(this);
//adapters for spinners
adapter1 = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item,getResources().getStringArray( R.array.adapter_1) );
adapter2 = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item,getResources().getStringArray(R.array. adapter_2));
adapter3 = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item,getResources().getStringArray( R.array. adapter_3) );
adapter4 = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_spinner_item,getResources().getStringArray(R.array. adapter_4));}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
resultView.setText(savedInstanceState.getString("result"));
valueEdit.setText(savedInstanceState.getString("value"));
spinnerFrom.setSelection(savedInstanceState.getInt("from"));
spinnertTo.setSelection(savedInstanceState.getInt("to"));
super.onSaveInstanceState(savedInstanceState);
}
//OnClick
@OnClick({R.id.button1, R.id.button2,R.id.button3,R.id.button4} )
public void setViewOnClickEvent(View view){
switch(view.getId()){
case R.id. button1:
fillSpinner(adapter1, adapter2); // fill spinner with values
break;
case R.id. button2:
fillSpinner(adapter3,
adapter4);
break;
//button for check if any adapter active
case R.id.buttonAdapter:
checkAdapter () ;
break;
}
}
//fill spinners when user checks radiobutton in radiogroups
protected void fillSpinner (final ArrayAdapter<String> spinnerToAdapter,
final ArrayAdapter<String> spinnerFromAdapter){
valueGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup valueGroup, int checkedId) {
pos = valueGroup.indexOfChild(findViewById(checkedId));
switch (pos) {
case 0:
spinnerFrom.setAdapter(spinnerToAdapter);
break;
case 1:
spinnerFrom.setAdapter(spinnerFromAdapter);
break;
}
}
});
resultGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup resultGroup, int checkedId) {
pos = resultGroup.indexOfChild(findViewById(checkedId));
switch (pos) {
case 0:
spinnertTo.setAdapter(spinnerToAdapter);
break;
case 1:
spinnertTo.setAdapter(spinnerFromAdapter);
break;
}
}
});
}
//simple method for check if both spinners has null value
protected void checkAdapter () {
//get Adapter from spinners
SpinnerAdapter valueAdapter = spinnerFrom.getAdapter();
SpinnerAdapter resultAdapter = spinnertTo.getAdapter();
if (valueAdapter == null | resultAdapter== null) {
Toast.makeText(this, “adapter null” , Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(this, “adapters not null” , Toast.LENGTH_SHORT).show();
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Всем привет, я новичок в AndroidУ меня есть два Spinner и в зависимости от выбора переходим к действию
Мне нужно полученное RGB значение пикселя отнести к 7 основным цветам, каким образом это сделать на Java?
В проекте нажал Invalidate and restart студия закрылась и вдруг выскочило окно
Делаю сайт на SpringЕсть страница html,при запуске не отображается графическая часть,а только формы ввода,полагаю дело в том,что java не находит...