Как получить список или элемент из Android Framengt? - PullRequest
0 голосов
/ 19 февраля 2019

Я создал экземпляр запроса с именем 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...