在我正在开发的应用程序中,我正在从数据库中检索一些数据。我的活动布局上有片段,我需要将数据推送到特定的选项卡。由于有标签,我正在使用ViewPagerAdapter;
,因此数据从MainActivity
到ViewPagerAdapter
到捆绑包中的片段。我认为这是因为那额外的停顿使我无法将束捆绑到片段本身,但我可能是错的。
问题是创建DescriptionTab.java
并使用getArguments().getString("Description")
时,getString()为空,因此没有数据被重新显示。
MainActivity.java
public class MainActivity extends AppCompatActivity {
public String description;
private TabLayout tabLayout;
private ViewPager viewpager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
description = "some text";
tabLayout = findViewById(R.id.takenTabs);
viewpager = findViewById(R.id.viewpager);
setupViewPager(viewpager);
tabLayout.setupWithViewPager(viewpager);
}
private void setupViewPager(ViewPager viewpager) {
ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
Bundle bundle = new Bundle();
bundle.putString("Description", description);
Fragment fragmentDesc = new DescriptionTab();
fragmentDesc.setArguments(bundle);
viewPagerAdapter.addFragment(fragmentDesc, "Beschrijving");
viewPagerAdapter.addFragment(new UsersTab(), "Ingeschreven");
viewPagerAdapter.addFragment(new CommentsTab(), "Opmerkingen");
viewpager.setAdapter(viewPagerAdapter);
}
}
我从数据库中获得了说明字符串,但是为了使它更简单,现在我只是在MainActivity中创建它。我确实知道它实际上是从数据库中检索数据的,因为当我将其推送到TextView
时它会显示数据。有3个标签,但现在我仅尝试将数据传递到“描述”标签。
ViewPagerAdapter.java
public class ViewPagerAdapter extends FragmentPagerAdapter {
private final ArrayList<Fragment> fragmentsList = new ArrayList<>();
private final ArrayList<String> fragmentTitle = new ArrayList<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm); }
@Override
public Fragment getItem(int position) {
return fragmentsList.get(position);
}
@Override
public int getCount() {
return fragmentsList.size();
}
public void addFragment(Fragment fragment, String tabTitle) {
fragmentsList.add(fragment);
fragmentTitle.add(tabTitle);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return fragmentTitle.get(position);
}
}
我曾尝试在addFragment()方法中使用数据创建片段和捆绑包,然后再将其添加到fragmentsList,但这也不起作用。
DescriptionTab.java
public class DescriptionTab extends Fragment {
public DescriptionTab() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle state) {
View rootView = inflater.inflate(R.layout.description_tab, container, false);
final Bundle args = getArguments();
final String description = args.getString("Description");
TextView descriptionText = rootView.findViewById(R.id.descriptionTxt);
descriptionText.setText(description);
// Inflate the layout for this fragment
return inflater.inflate(R.layout.description_tab, container, false);
}
}
getString(“ Description”)应该可以检索数据,但是Android Studio已经对其进行了检查,并告诉我它可能会产生NullPointerException。我猜它会产生NullPointerException,因为我自己在代码的其他部分找不到问题。
[请告诉我,如果您知道我在做什么错或为什么它不起作用。
尝试一下
this.getArguments();
代码段
final Bundle args = this.getArguments();