-3

在询问之前,我已经经历了类似的问题并尝试了它们,但没有成功,而且每次都以空指针异常结束。我要做的就是将字符串中的用户名从一个活动传递到我的选项卡式活动的另一个片段。这是我尝试过的,我的主要活动代码

Bundle bundle = new Bundle();
                bundle.putString("NAME", username);
                //PASS OVER THE BUNDLE TO OUR FRAGMENT
                ProfileFragment profileFragment = new ProfileFragment();
                profileFragment.setArguments(bundle);

                startActivity(new Intent(MainActivity.this, TabbedAct.class));

以及来自 ProfileFragment 的代码

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_profile, container, false);

    profilename = (TextView) rootView.findViewById(R.id.profile);

    String name= this.getArguments().getString("NAME");

    profilename.setText(name);

    return rootView;
}
4

1 回答 1

0

这是因为ProfileFragment还看不到。您正在启动一个 Activity 而不是片段。

首先,您需要为 TabbedAct 赋予额外的价值

Intent intent = new Intent(MainActivity.this, TabbedAct.class);
intent.putExtra("Name", username);
startActivity(intent);

然后,在 TabbedAct Activity 中,您需要初始化您的ProfileFragment

String username = getIntent().getStringExtra("Name");
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

.....
viewpager.setAdapter(viewPagerAdapter);
viewpager.setCurrentItem(0);
viewPagerAdapter.notifyDataSetChanged();

以及来自 ProfileFragment 的代码

public static ProfileFragment newInstance(String username) {
    ProfileFragment f = new ProfileFragment();
    Bundle bdl = new Bundle();
    bdl.putString("NAME", username);
    f.setArguments(bdl);
    return f;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_profile, container, false);

    profilename = (TextView) rootView.findViewById(R.id.profile);

    String name= this.getArguments().getString("NAME");

    profilename.setText(name);

    return rootView;
}

如果您没有 ViewPagerAdapter。你可以用我的

viewPagerAdapter.addFragment(,);
viewPagerAdapter.addFragment(,"Tab2");
viewPagerAdapter.addFragment(Fragment2.newsIntance(),"Tab3");

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private final String username;

    public ViewPagerAdapter(FragmentManager fragmentManager, String username) {
        super(fragmentManager);
        this.username = username;
    }

    @Override
    public Fragment getItem(int position) {
        if(position == 0) return ProfileFragment.newInstance(username);
        if(position == 1) return Fragment2.newsIntance();
        if(position == 2) return Fragment3.newsIntance();

        throw new IllegalStateException("Unexpected position " + position);
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        if(position == 0) return "Tab1";
        if(position == 1) return "Tab2";
        if(position == 2) return "Tab3";
      
        throw new IllegalStateException("Unexpected position " + position);
    }
}
于 2017-05-02T01:21:54.870 回答