如何将字符串从 activity 传递到 android 中选项卡式 activity 的片段
How to pass a String from an activity to fragment of a tabbed activity in android
在问之前我已经经历过类似的问题并尝试过但没有成功,每次都以空指针异常结束。
我想要做的就是将字符串中的用户名从一个 activity 传递到我的选项卡 activity 的另一个片段。
这是我尝试过的,我的主要 activity 代码
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;
}
因为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);
}
}
在问之前我已经经历过类似的问题并尝试过但没有成功,每次都以空指针异常结束。 我想要做的就是将字符串中的用户名从一个 activity 传递到我的选项卡 activity 的另一个片段。 这是我尝试过的,我的主要 activity 代码
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;
}
因为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);
}
}