Дорогие друзья, возникла проблема, помогите пожалуйста. В приложении есть активити с фрагментом, в котором происходит основное действие, а именно: есть несколько невидимых картинок и кнопка. При нажатии на кнопку нас перекидывает на другую активити, где просят ввести пин-код, мы вводим, и нас перебрасывает обратно (использую для этого onActivityResult), и картинка становится видимой.
Так как у нас несколько картинок, возникла необходимость сохранять их состояние (если свернуть, или закрыть приложение, и снова зайти в это активити - все картинки снова невидимые).
Я решил использовать для этого SharedPreferences, onResume и onPause.
Но возникла проблема: теперь картинка не становится видимой после ввода пин-кода и возвращении к первой активити. А если убрать проверку пин-кодом, и просто попросить кноку сделать картинку видимой, то все работает, и сохраняет.
Прикладываю кусочек кода:
public class MainFragment extends Fragment {
private ImageView imageViewDoneOne, imageViewDoneTwo;
private SharedPreferences mSettings;
public static final String APP_PREFERENCES = "Settings";
public static final String APP_PREFERENCES_STAMP = "stamp1";
public static final String APP_PREFERENCES_STAMP2 = "stamp2";
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_main, container,false);
mSettings = this.getActivity().getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
imageViewDoneOne = (ImageView)view.findViewById(R.id.done_one);
imageViewDoneTwo = (ImageView)view.findViewById(R.id.done_two);
view.findViewById(R.id.button_stamp).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (imageViewDoneOne.getVisibility() == View.INVISIBLE){
//Делаем картинку видимой без переносана в PinActivity и SharedPreferences работает
imageViewDoneOne.setVisibility(View.VISIBLE);
} else if (imageViewDoneOne.getVisibility() == View.VISIBLE &&
imageViewDoneTwo.getVisibility() == View.INVISIBLE){
//Делаем картинку видимой с переходом в PinActivity и SharedPreferences НЕработает
Intent intent = new Intent(getActivity(), PinActivity.class);
startActivityForResult(intent, 1);
}
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null) {return;}
int visi = data.getIntExtra("value", View.VISIBLE);
if (imageViewDoneOne.getVisibility() == View.INVISIBLE) {
imageViewDoneOne.setVisibility(visi);
} else if (imageViewDoneOne.getVisibility() == View.VISIBLE &&
imageViewDoneTwo.getVisibility() == View.INVISIBLE){
imageViewDoneTwo.setVisibility(View.VISIBLE);
}
}
@Override
public void onResume() {
super.onResume();
if (mSettings.contains(APP_PREFERENCES_STAMP)){
imageViewDoneOne.setVisibility(mSettings.getInt(APP_PREFERENCES_STAMP, 0));
}
if (mSettings.contains(APP_PREFERENCES_STAMP2)){
imageViewDoneTwo.setVisibility(mSettings.getInt(APP_PREFERENCES_STAMP2, 0));
}
}
@Override
public void onPause() {
super.onPause();
SharedPreferences.Editor editor = mSettings.edit();
editor.putInt(APP_PREFERENCES_STAMP, imageViewDoneOne.getVisibility());
editor.apply();
editor.putInt(APP_PREFERENCES_STAMP2, imageViewDoneTwo.getVisibility());
editor.apply();
}
}
PinActivity:
public class PinActivity extends AppCompatActivity {
public static final String TAG = "PinLockView";
private PinLockView mPinLockView;
private IndicatorDots mIndicatorDots;
private String pinCode = "1234";
public static int visibility = View.VISIBLE;
private PinLockListener mPinLockListener = new PinLockListener() {
@Override
public void onComplete(String pin) {
Intent answer = new Intent();
Log.d(TAG, "Pin complete: " + pin);
if (pin.equals(pinCode)) {
answer.putExtra("value", visibility);
setResult(RESULT_OK, answer);
finish();
} else {
Toast toast = Toast.makeText(getApplicationContext(),
"Wrong pin", Toast.LENGTH_SHORT);
toast.show();
}
}
@Override
public void onEmpty() {
Log.d(TAG, "Pin empty");
}
@Override
public void onPinChange(int pinLength, String intermediatePin) {
Log.d(TAG, "Pin changed, new length " + pinLength + " with intermediate pin " + intermediatePin);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pin);
mPinLockView = (PinLockView) findViewById(R.id.pin_lock_view);
mIndicatorDots = (IndicatorDots) findViewById(R.id.indicator_dots);
mPinLockView.attachIndicatorDots(mIndicatorDots);
mPinLockView.setPinLockListener(mPinLockListener);
mPinLockView.setPinLength(4);
mPinLockView.setTextColor(ContextCompat.getColor(this, R.color.white));
mIndicatorDots.setIndicatorType(IndicatorDots.IndicatorType.FILL_WITH_ANIMATION);
}
}
Спасибо всем за внимание и простите, если вопрос глупый, так как только учусь!)
Имейте в виду что сначала идет вызов метода onActivityResult()
, а после onResume()
который переопределяет видимость вашего изображения
Для сохранения состояния данных лучше использовать метод onSaveInstanceState
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеНаткнулся на такую проблему: имею 3 кнопки(ImageButton), необходимо после 1-ого нажатия на одну из кнопок,отследить послеующее нажатие(OnClick)...
Здравствуйте, есть задание скачать файл XML по ссылке, парсить и сохранить данные в SQLПоделитесь пожалуйста мыслями, ссылками на ресурсы и похожие...