我想将Serializable对象从活动传递到片段。但在片段中,getArguments()总是将null调整为空。然后,我尝试将一个简单的字符串值从活动传递到片段,它仍然显示NullPointerExection。
这是我的活动班
public class FullProfile extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private Customer customer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_full_profile);
tabLayout = findViewById(R.id.tabLayout);
viewPager = findViewById(R.id.myViewPager);
setupViewPager(viewPager);
ProfileBasicFragment basic = new ProfileBasicFragment();
Bundle bundle = new Bundle();
bundle.putString("profile", "Hello Hello");
basic.setArguments(bundle);
getSupportFragmentManager().beginTransaction().add(R.id.myViewPager, basic).commit();
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
FragmentAdapter fragmentAdapter = new FragmentAdapter(getSupportFragmentManager(), 4);
fragmentAdapter.addFragment(new ProfileBasicFragment(), "Profile");
fragmentAdapter.addFragment(new ProductFragment(), "Product");
fragmentAdapter.addFragment(new WatchListFragment(), "Choices");
viewPager.setAdapter(fragmentAdapter);
}
}
这是我的片段..
public class ProfileBasicFragment extends Fragment {
TextView t;
String s;
public ProfileBasicFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_profile_basic, container, false);
t = view.findViewById(R.id.nameTV);
String s = getArguments().getString("profile");
t.setText(s);
return view;
}
}
这是错误
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
我不明白我的错是什么。你能帮助我吗?谢谢
您使用相同的片段两次,并且仅在basic(setupviewpager和basic)中发送一次参数。在两种情况下都传递参数,或者在获取字符串之前添加null检查。
实际的问题是在初始化viewPager时。
private void setupViewPager(ViewPager viewPager) {
...
fragmentAdapter.addFragment(new ProfileBasicFragment(), "Profile");
//Problem is here
...
}
因此也从此处或在您的片段中发送数据,请执行此操作
if(getArguments()!=null){
String s = getArguments().getString("profile");
t.setText(s);
}