无法将字符串从Activity传递到片段

问题描述 投票:0回答:2

我想将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

我不明白我的错是什么。你能帮助我吗?谢谢

android string fragment
2个回答
0
投票

您使用相同的片段两次,并且仅在basic(setupviewpager和basic)中发送一次参数。在两种情况下都传递参数,或者在获取字符串之前添加null检查。


0
投票

实际的问题是在初始化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);
 }
© www.soinside.com 2019 - 2024. All rights reserved.