У меня есть разные макеты для пейзажного и портретного режима. Когда я выбираю значения из радиокнопок в группе радио и изменяю ориентацию, отображается новый макет, и все значения исчезают. Пожалуйста помоги.Как сохранить значения переключателей из списка в андроиде при изменении ориентации
package com.hp.opiniondesknew;
import android.content.Context;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.os.ParcelableCompat;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* Created by HP on 15-12-2016.
*/
public class FragmentFeedback extends Fragment {
private ArrayList<Questions> questionsArrayList;
HashMap<Questions, String> mapAns=new HashMap<Questions, String>();
private MyAdapter myAdapter;
private ListView listFeedbackQuestions;
private Button btSubmitFeedback;
private String selectedAns;
ArrayList<String> rbAnswersArray = new ArrayList<>();
int yesCount=0,noCount=0;
Questions questionPojo;
public FragmentFeedback() {
// setRetainInstance(true);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.feedback_layout,container,false);
listFeedbackQuestions= (ListView)view.findViewById(R.id.opinion_desk_feedback_lv_questions);
btSubmitFeedback=(Button)view.findViewById(R.id.opinion_desk_feedback_bt_submit);
questionsArrayList= new ArrayList<Questions>();
addlistview();
initializeBtnSubmit(btSubmitFeedback);
return view;
}
private void initializeBtnSubmit(Button btSubmitFeedback) {
btSubmitFeedback.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//---------
try
{
for(Map.Entry m:mapAns.entrySet()){
// System.out.println(m.getKey"()+" "+m.getValue());
Log.e("key value",m.getKey()+""+m.getValue());
}
if(mapAns.size()==0 || mapAns.size()< questionsArrayList.size())
{
Toast.makeText(getContext(),"Ans all q",Toast.LENGTH_SHORT).show();
}
else
{
int countYes = Collections.frequency(mapAns.values(), "yes");
{
Log.e("yescount",countYes+"");
}
int countNo = Collections.frequency(mapAns.values(), "no");
{
Log.e("noCount",countNo+"");
Log.e("mapsize",mapAns.size()+"");
}
if(countYes>countNo)
{
Fragment someFragment = new FragmentTestimonial();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.content_frame, someFragment); // give your fragment container id in first parameter
// transaction.addToBackStack(null); // if written, this transaction will be added to backstack
transaction.commit();
Log.e("noCount",countNo+"");
Log.e("yescount",countYes+"");
// Log.e("yes is greater",rbAnswersArray.size()+"");
}
else
{
Fragment someFragment = new FragmentSuggestions();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.content_frame, someFragment); // give your fragment container id in first parameter
// transaction.addToBackStack(null); // if written, this transaction will be added to backstack
transaction.commit();
Log.e("noCount",countNo+"");
Log.e("yescount",countYes+"");
}
mapAns.clear();
}
}catch (Exception e){e.printStackTrace();}
//-----
}
});
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
getActivity().setTitle("Feedback");
}
public void addlistview()
{
try
{
for (int i=0;i<5;i++) {
Questions questions = new Questions();
// questions.setQuestion(i+"");
questions.setQuestion("Did you like the performance of the service?");
questions.setQuestionNo(i);
questionsArrayList.add(questions);
myAdapter = new MyAdapter(getContext(), questionsArrayList);
listFeedbackQuestions.setAdapter(myAdapter);
if(selectedState != null) {
listFeedbackQuestions.onRestoreInstanceState(selectedState);
}
// Log.e("pojo",questions.toString());
}
}
catch (Exception e){e.printStackTrace();}
}
public class MyAdapter extends BaseAdapter {
Context context;
ArrayList<Questions> questionsArrayList;
LayoutInflater inflator;
public MyAdapter(Context context, ArrayList<Questions> questionsArrayList) {
this.context = context;
this.questionsArrayList = questionsArrayList;
inflator= LayoutInflater.from(context);
}
@Override
public int getCount() {
return questionsArrayList.size();
}
@Override
public Object getItem(int position) {
return questionsArrayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// Questions questionsPojo= new Questions();
Holder holder= new Holder();
if(convertView==null)
{
convertView=inflator.inflate(R.layout.feedback_question_row,parent,false);
holder.tvQuestion=(TextView) convertView.findViewById(R.id.opinion_desk_feedback_tv_question);
holder.rGroupButtons=(RadioGroup)convertView.findViewById(R.id.opinion_desk_rg_yes_no);
holder.rbYes=(RadioButton) convertView.findViewById(R.id.opinion_desk_feedback_rb_yes);
holder.rbNo=(RadioButton)convertView.findViewById(R.id.opinion_desk_feedback_rb_no);
convertView.setTag(holder);
}
else
{
holder=(Holder)convertView.getTag();
}
questionPojo=questionsArrayList.get(position);
holder.tvQuestion.setText(questionsArrayList.get(position).getQuestion());
final Holder finalHolder = holder;
holder.rGroupButtons.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (finalHolder.rbYes.isChecked())
{
Log.e("no",position+"");
finalHolder.selectedAnswer="yes";
questionsArrayList.get(position).setAnswer(finalHolder.selectedAnswer);
selectedAns= questionsArrayList.get(position).getAnswer();
rbAnswersArray.add(selectedAns);
yesCount++;
}
else
{
Log.e("no",position+"");
finalHolder.selectedAnswer="no";
questionsArrayList.get(position).setAnswer(finalHolder.selectedAnswer);
selectedAns=questionsArrayList.get(position).getAnswer();
noCount++;
}
mapAns.put(questionsArrayList.get(position),selectedAns);
rbAnswersArray.add(selectedAns);
//
}
});
return convertView;
}
}
public class Holder
{
TextView tvQuestion;
RadioGroup rGroupButtons;
RadioButton rbYes,rbNo, rbSelectedAnswer;
String selectedAnswer, ansNo;
}
@Override
public void onDestroyOptionsMenu() {
super.onDestroyOptionsMenu();
}
// @Override
// public void onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState);
// }
}
Я использую listview и пользовательский адаптер для listview. Я запускаю фрагмент обратной связи из навигационной активности. OnSavedInstanceState не работает, приложение обрушивается на метод onRestore. Возможно, я что-то делаю неправильно.
сохранить выбранные позиции по изменению ориентации (onSaveInstanceState) и использовать его после этого. – Spartan
Я новичок в разработке Android. Не могли бы вы предложить какой-то способ относительно того, как я могу сохранить позицию? – madhura21
Это полное решение http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html. – Spartan