将包数据从 main activity 发送到 fragment
Sending bundle data from main activity to fragment
我在两个选项卡上有一个 activity 和片段,我正在尝试使用 bundle 从主 class 向片段发送一个变量。
但是我收不到任何信息,而且我只收到空值。
感谢您的帮助!
public class DetailedInfo extends AppCompatActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detailed_info);
/////INFO, I WANT TO SEND
InfoFragment fragment = new InfoFragment ();
Bundle args = new Bundle();
args.putString("key", "text i want to send" );
fragment.setArguments(args);
////
//TABS setup
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Create the adapter that will return a fragment for each of the two
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_detailed_info, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return PicturesFragment.newInstance(position + 1);
case 1:
return InfoFragment.newInstance(position + 1);
}
return null;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Pictures";
case 1:
return "Info";
}
return null;
}
}
public static class PicturesFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public static PicturesFragment newInstance(int sectionNumber) {
PicturesFragment fragment = new PicturesFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View detailedpictures = inflater.inflate(R.layout.fragment_detailed_pictures, container, false);
return detailedpictures;
}
}
public static class InfoFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public static InfoFragment newInstance(int sectionNumber) {
InfoFragment fragment = new InfoFragment ();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
View detailedinfo = inflater.inflate(R.layout.fragment_detailed_info, container, false);
////INFO, I WANT TO RECEIVE
Bundle bundle = getArguments();
String customtext = bundle.getString("key");
TextView detailtext= (TextView)detailedinfo.findViewById(R.id.info);
detailtext.setText(customtext);
////
return detailedinfo;
}
}
}
由于您没有在片段中使用 sectionNumber,我建议如下:
public static class InfoFragment extends Fragment {
public static InfoFragment newInstance(String value) {
InfoFragment fragment = new InfoFragment ();
Bundle args = new Bundle();
args.putInt("key", value);
fragment.setArguments(args);
return fragment;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
View detailedinfo = inflater.inflate(R.layout.fragment_detailed_info, container, false);
////INFO, I WANT TO RECEIVE
Bundle bundle = getArguments();
String customtext = bundle.getString("key");
TextView detailtext= (TextView)detailedinfo.findViewById(R.id.info);
detailtext.setText(customtext);
////
return detailedinfo;
}
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
private InfoFragment infoFragment;
private PictureFragment picFragment;
public SectionsPagerAdapter(FragmentManager fm, InfoFragment infoFrg, PictureFragment picFrg) {
super(fm);
this.infoFragment = infoFrg;
this.picFragment = picFrg;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return infoFragment;
case 1:
return picFragment;
}
return null;
}
最后:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detailed_info);
/////INFO, I WANT TO SEND
InfoFragment infoFragment = InfoFragment.newInstance("text I want to send");
////
PictureFragment picFrament = PictureFragment.newInstance(0);
//TABS setup
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Create the adapter that will return a fragment for each of the two
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), infoFragment, picFragment);
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
我在两个选项卡上有一个 activity 和片段,我正在尝试使用 bundle 从主 class 向片段发送一个变量。
但是我收不到任何信息,而且我只收到空值。
感谢您的帮助!
public class DetailedInfo extends AppCompatActivity {
private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detailed_info);
/////INFO, I WANT TO SEND
InfoFragment fragment = new InfoFragment ();
Bundle args = new Bundle();
args.putString("key", "text i want to send" );
fragment.setArguments(args);
////
//TABS setup
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Create the adapter that will return a fragment for each of the two
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_detailed_info, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return PicturesFragment.newInstance(position + 1);
case 1:
return InfoFragment.newInstance(position + 1);
}
return null;
}
@Override
public int getCount() {
return 2;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return "Pictures";
case 1:
return "Info";
}
return null;
}
}
public static class PicturesFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public static PicturesFragment newInstance(int sectionNumber) {
PicturesFragment fragment = new PicturesFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View detailedpictures = inflater.inflate(R.layout.fragment_detailed_pictures, container, false);
return detailedpictures;
}
}
public static class InfoFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
public static InfoFragment newInstance(int sectionNumber) {
InfoFragment fragment = new InfoFragment ();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
View detailedinfo = inflater.inflate(R.layout.fragment_detailed_info, container, false);
////INFO, I WANT TO RECEIVE
Bundle bundle = getArguments();
String customtext = bundle.getString("key");
TextView detailtext= (TextView)detailedinfo.findViewById(R.id.info);
detailtext.setText(customtext);
////
return detailedinfo;
}
}
}
由于您没有在片段中使用 sectionNumber,我建议如下:
public static class InfoFragment extends Fragment {
public static InfoFragment newInstance(String value) {
InfoFragment fragment = new InfoFragment ();
Bundle args = new Bundle();
args.putInt("key", value);
fragment.setArguments(args);
return fragment;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState ) {
View detailedinfo = inflater.inflate(R.layout.fragment_detailed_info, container, false);
////INFO, I WANT TO RECEIVE
Bundle bundle = getArguments();
String customtext = bundle.getString("key");
TextView detailtext= (TextView)detailedinfo.findViewById(R.id.info);
detailtext.setText(customtext);
////
return detailedinfo;
}
}
public class SectionsPagerAdapter extends FragmentStatePagerAdapter {
private InfoFragment infoFragment;
private PictureFragment picFragment;
public SectionsPagerAdapter(FragmentManager fm, InfoFragment infoFrg, PictureFragment picFrg) {
super(fm);
this.infoFragment = infoFrg;
this.picFragment = picFrg;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return infoFragment;
case 1:
return picFragment;
}
return null;
}
最后:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detailed_info);
/////INFO, I WANT TO SEND
InfoFragment infoFragment = InfoFragment.newInstance("text I want to send");
////
PictureFragment picFrament = PictureFragment.newInstance(0);
//TABS setup
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// Create the adapter that will return a fragment for each of the two
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(), infoFragment, picFragment);
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}