片段中的getArguments()。getString()返回null

问题描述 投票:-1回答:1

在我正在开发的应用程序中,我正在从数据库中检索一些数据。我的活动布局上有片段,我需要将数据推送到特定的选项卡。由于有标签,我正在使用ViewPagerAdapter;,因此数据从MainActivityViewPagerAdapter到捆绑包中的片段。我认为这是因为那额外的停顿使我无法将束捆绑到片段本身,但我可能是错的。

问题是创建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,因为我自己在代码的其他部分找不到问题。

[请告诉我,如果您知道我在做什么错或为什么它不起作用。

java android android-fragments android-viewpager android-bundle
1个回答
0
投票

尝试一下

this.getArguments();

代码段

final Bundle args = this.getArguments();
© www.soinside.com 2019 - 2024. All rights reserved.