Я создал экземпляр запроса с именем OptionsListFragment, например:
optionsListFragment=OptionsListFragment.newInstance(sendBundle);
в Activity, а класс OptionsListFragment определен как:
public class OptionsListFragment extends Fragment {
'''
public int getFragmentID() {
return this.fragmentID;
}
public List<Option> getOptions() {
return this.mOptions;
}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view=inflater.inflate(R.layout.options_list,container,false);
recyclerView = view.findViewById(R.id.options_list);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
getData();
updateUI();
Log.e(TAG, "onCreateView: "+mOptions.size() );
return view;
}
public static OptionsListFragment newInstance(Bundle bundle){
OptionsListFragment f=new OptionsListFragment();
Log.e(TAG, "newInstance: " );
f.setArguments(bundle);
return f;
}
private void getData(){
Bundle bundle = getArguments();
this.fragmentID=bundle.getInt("fragmentID");
pageID=bundle.getInt("pageID");
mToShowOptions =(List<Option>)bundle.getSerializable(MainActivity.EXTRA_TO_SHOW);
mSavedOptions =(List<Option>)bundle.getSerializable(OptionFragmentActivity.EXTRA_SAVED);
if (fragmentID!=0){
try{
stream=getActivity().getResources().getAssets().open("keyvaluepairs.xml");
}catch (Exception e){
Log.e(TAG, "updateUI:OpenFile failed! " );
}
OptionsLab optionsLab=OptionsLab.get(stream,fragmentID);
this.mOptions = optionsLab.getOptions();
}else {
if (mToShowOptions==null||mToShowOptions.isEmpty()){
this.mOptions = mSavedOptions;
}else if (mSavedOptions==null||mSavedOptions.isEmpty()){
this.mOptions = mToShowOptions;
}
}
}
private void updateUI(){
mOptionAdapter=new OptionAdapter(mOptions);
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL));
recyclerView.setAdapter(mOptionAdapter);
recyclerView.setItemAnimator(new DefaultItemAnimator());
}
}
Однако, когда я вызываю метод getOptions()
из Activity, я не могу получить mOptions, я получаю пустой список, и я могу получить только нулевое значение даже при вызове getFragmentID()
.Эта проблема мучила меня долгое время, но я действительно не могу найти решение. Код, который я использовал для обновления фрагмента в Activity, выглядит следующим образом:
private void reFreshFragment(int fragmentID){
Log.e(TAG, "reFreshFragment: "+fragmentID );
SavedOptions=new ArrayList<>();
sendBundle.clear();
mFragmentList.clear();
switch (fragmentID){
case R.id.rb_landscape:
SavedOptions=LandUseOptions;
break;
case R.id.rb_basicInformation:
SavedOptions=BasicOptions;
break;
case R.id.rb_MHSLandQuality:
SavedOptions=MHSLandQualityOptions;
break;
case R.id.rb_PlainLandQuality:
SavedOptions=PlainLandQualityOptions;
break;
}
sendBundle.putInt("pageID",0);
if (checkMessage(SavedOptions)){
sendBundle.putInt("fragmentID", fragmentID);
}else {
sendBundle.putSerializable(EXTRA_SAVED, (Serializable)SavedOptions);
}
optionsListFragment=OptionsListFragment.newInstance(sendBundle);
Log.e(TAG, "reFreshFragment: optionsListFragment"+ optionsListFragment.getFragmentID() );
mFragmentList.add(optionsListFragment);
if (checkedFragmentID==R.id.rb_MHSLandQuality||checkedFragmentID==R.id.rb_PlainLandQuality){
createSecondPage(checkedFragmentID);
mFragmentList.add(surveyFragment);
Log.e(TAG, "reFreshFragment: surveyFragment"+ surveyFragment.getFragmentID() );
}
mViewPager.removeAllViews();
mViewPager.setAdapter(new ViewPagerAdapter(fm,mFragmentList));
Log.e(TAG, "reFreshFragmentActually: "+mFragmentList.size() );
currentFragmentID=checkedFragmentID;
}