我试图将字符串从无源传递给片段,以便可以在其中实现的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?).
答案 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);
}
}