I have an activity that contains a fragment that contains a recyclerview when I view the app in portrait it work fine but when I turn to landscape the data is doupled meaning I have a recyclerview when swipe it i see another under it.
the code of activity
public class DailyAzkaar extends AppCompatActivity {
Toolbar toolbar;
SharedPreferences settings;
String locale;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_daily_azkaar);
settings = getSharedPreferences("MyPrefs", 0);
locale = settings.getString("locale", "en-US");
Locale.setDefault(Locale.forLanguageTag(locale));
Configuration config = new Configuration();
config.setLocale(Locale.forLanguageTag(locale));
//config.locale = locale;
getResources().updateConfiguration(config,getResources().getDisplayMetrics());
toolbar=(Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
DailyAzkaarFragment dailyAzkaarFragment=new DailyAzkaarFragment();
fragmentTransaction.add(R.id.fragment_container,dailyAzkaarFragment);
fragmentTransaction.commit();
}
@Override
protected void onResume() {
super.onResume();
Toast.makeText(this,"onResume",Toast.LENGTH_SHORT).show();
}
}
this is the code of fragment
public class DailyAzkaarFragment extends Fragment implements ItemClickListener {
ArrayList<AzkarForm> list;
RecyclerView rv;
int activity;
SharedPreferences settings;
Boolean[] favourite=new Boolean[28];
Boolean[] favourite_evening=new Boolean[27];
RecyclerView.LayoutManager layoutManager;
RecyclerFavouriteAdapter adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.daily_azkaar_fragment,container, false);
rv = (RecyclerView) view.findViewById(R.id.recyclerviewcard);
activity = getActivity().getIntent().getIntExtra("activity", 3);
AzkaarData azkaarData=new AzkaarData(getActivity());
settings = getActivity().getSharedPreferences("MyPrefs", 0);
if (settings.getBoolean("is_first_time", true)) {
//the app is being launched for first time, do something
Log.d("TAG", "First time");
settings.edit().putBoolean("is_first_time", false).commit();
storeArray(favourite,"fav",false,getActivity());
storeArray(favourite_evening,"fav_evening",false,getActivity());
} else {
//second time launch..
favourite=loadArray("fav",getActivity());
favourite_evening=loadArray("fav_evening",getActivity());
for(int i=0;i<favourite.length;i++)
Log.d("msg ",String.valueOf(favourite[i]));
}
if(activity == 1)
list=azkaarData.getArrayListData(favourite,activity);
else
list=azkaarData.getArrayListData(favourite_evening,activity);
layoutManager=new LinearLayoutManager(getActivity());
rv.setLayoutManager(layoutManager);
rv.setHasFixedSize(true);
adapter=new RecyclerFavouriteAdapter(list,activity,getActivity());
rv.setAdapter(adapter);
adapter.setClickListener(this);
return view;
}
public boolean storeArray(Boolean[] array, String arrayName,boolean b, Context mContext) {
settings = mContext.getSharedPreferences("MyPrefs", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putInt(arrayName +"_size", array.length);
for(int i=0;i<array.length;i++) {
editor.putBoolean(arrayName + "_" + i, b);
array[i]=b;
}
return editor.commit();
}
public Boolean[] loadArray(String arrayName, Context mContext) {
settings = mContext.getSharedPreferences("MyPrefs", 0);
int size = settings.getInt(arrayName + "_size", 0);
Boolean array[] = new Boolean[size];
for(int i=0;i<size;i++)
array[i] = settings.getBoolean(arrayName + "_" + i, true);
return array;
}
@Override
public void onClick(View view, int position) {
if(view.getId()==R.id.cardview) {
//AzkarForm azkarForm = list.get(p);
Intent intent = new Intent(getActivity(), DetailsActivity.class);
intent.putExtra("position", position);
if(activity == 1) intent.putExtra("activity", 3);
else intent.putExtra("activity", 4);
this.startActivity(intent);
}
}
}
When the orientation of the screen changes in Android, the activity is usually destroyed and recreated. The recreation may cause some anomalies. To solve this, you will need to save the state of the activity (or fragment or anything) and restore it when the activity is recreated. You should do the following
public void onCreate(Bundle savedInstanceState) {
...
if (savedInstanceState != null) {
//Restore the fragment's instance
mContent = getSupportFragmentManager().getFragment(savedInstanceState, "myFragmentName");
...
}
...
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//Save the fragment's instance
getSupportFragmentManager().putFragment(outState, "myFragmentName", mContent);
}
mContent
is a Fragment, the reference to the instance of the current fragment in the activity. I hope this helps.