Сбой моего приложения при попытке передать данные из действия во фрагмент - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь передать строку из анимации во фрагмент, чтобы я мог использовать ее в реализованной там AsynkTask, но приложение вылетает каждый раз, когда я добавляю эту строку в код фрагмента: String id_client= bundle.getString("client_id"); ... воткод фрагмента

public class FragmentContrat extends Fragment {
    View view ;


    public FragmentContrat() {
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view =inflater.inflate(R.layout.contrat_fragment,container,false);


        Bundle bundle = this.getArguments();

        String id_client= bundle.getString("client_id");

        if(bundle!=null){

            Log.d("s","fine");

        }else {

            Log.d("s","problem");
        }

        return view ;

}   

Я добавил оператор if, чтобы проверить, является ли пакет нулевым и действительно ли это.

Вот код активности, куда я отправил данные:

public class DetailsContrat extends AppCompatActivity {

    TabLayout details_tab;
    AppBarLayout details_bar;
    ViewPager details_pager;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_details_contrat);

        details_tab=(TabLayout)findViewById(R.id.details_tab);
        details_bar=(AppBarLayout) findViewById(R.id.details_bar);
        details_pager=(ViewPager)findViewById(R.id.details_pager);

        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.AddFragment(new FragmentContrat(),"MON CONTRAT");
        adapter.AddFragment(new FragmentVehicule(),"MA VOITURE");
        adapter.AddFragment(new FragmentGaranties(),"MES GARANTIES");
        details_pager.setAdapter(adapter);
        details_tab.setupWithViewPager(details_pager);


        Bundle bundle = new Bundle();
        bundle.putString("id_client","my name");
        FragmentContrat fragmentContrat = new FragmentContrat();
        fragmentContrat.setArguments(bundle);


    }


}

Ошибка Logcat

2019-03-16 00:13:39.221 1699-5578/system_process E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2019-03-16 00:13:39.222 1699-5578/system_process E/eglCodecCommon: glUtilsParamSize: unknow param 0x000082da
2019-03-16 00:13:40.607 1699-1860/system_process E/TaskPersister: File error accessing recents directory (directory doesn't exist?).

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

На самом деле я нахожу решение ... в основном упражнении я создавал новый объект фрагмента и добавлял его в адаптер adapter.AddFragment(new FragmentContrat(),"MON CONTRAT"); ... затем я создавал другой объект фрагмента FragmentContrat fragmentContrat = new FragmentContrat(); и настраивалпакет там ... так что на самом деле пакет первого фрагмента, который я передал адаптеру, является нулевым, что вызвало сбой ... правильный способ - создать новый объект фрагмента, установить пакет, а затем добавить его кадаптер вот так

    public class DetailsContrat extends AppCompatActivity {

        TabLayout details_tab;
        AppBarLayout details_bar;
        ViewPager details_pager;




        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_details_contrat);

            details_tab=(TabLayout)findViewById(R.id.details_tab);
            details_bar=(AppBarLayout) findViewById(R.id.details_bar);
            details_pager=(ViewPager)findViewById(R.id.details_pager);


            /* Creating new object and setting its arguments here */
            Bundle bundle = new Bundle();
            bundle.putString("id_client","my name");
            FragmentContrat fragmentContrat = new FragmentContrat();
            fragmentContrat.setArguments(bundle);


            ViewPagerAdapter adapter = new 
            ViewPagerAdapter(getSupportFragmentManager());

            /* Adding the object already created and setted here */
            adapter.AddFragment(fragmentContrat ,"MON CONTRAT");

            adapter.AddFragment(new FragmentVehicule(),"MA VOITURE");
            adapter.AddFragment(new FragmentGaranties(),"MES GARANTIES");
            details_pager.setAdapter(adapter);
            details_tab.setupWithViewPager(details_pager);





        }


    }
0 голосов
/ 16 марта 2019

Ваш код неверен в коде активности.

Изменить

bundle.putString("id_client","my name");

до

bundle.putString("client_id","my name");

Ключ должен быть одинаковым как в активности, так и во фрагменте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...