尝试将数据从活动传递到片段时我的应用程序崩溃

时间:2019-03-15 22:24:07

标签: android android-fragments

我试图将字符串从无源传递给片段,以便可以在其中实现的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语句,以检查bundle是否为null,实际上是否为null。

这是我发送数据的活动代码:

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 :(得分:0)

您的密码不正确。

更改

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

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

活动和片段中的键必须相同。

答案 1 :(得分:0)

实际上,我找到了解决方案……在主要活动中,我正在创建片段的新对象并将其添加到适配器中 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);





        }


    }