我的代码有一个小问题,我在这个网站上搜索但仍然没有找到最佳答案 我将把数据发送到我的选项卡片段,这是我的代码
我的活动课
public class MainActivity extends AppCompatActivity
private ViewPager pager;
private Toolbar toolbar;
private TabLayout tabs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pager=(ViewPager) findViewById(R.id.pager);
tabs=(TabLayout) findViewById(R.id.tabs);
pager.setAdapter(new TabFragmentPagerAdapter(getSupportFragmentManager()));
tabs.setupWithViewPager(pager);
tabs.setTabGravity(TabLayout.GRAVITY_FILL);
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
// set Fragmentclass Arguments
tab1Fragment fragobj = new tab1Fragment();
fragobj.setArguments(bundle);
}
}
这是我的 tab1 类
public class tab1Fragment extends Fragment
public tab1Fragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view= inflater.inflate(R.layout.fragment_tab1, container, false);
TextView tes=(TextView) view.findViewById(R.id.testtab1);
String strtext = getArguments().getString("edttext");
tes.setText("tes :"+ strtext);
return view;
}
}
这是我的页面片段适配器
public class TabFragmentPagerAdapter extends FragmentPagerAdapter
String[] title = new String[]{
"Tab 1", "Tab 2", "Tab 3"
};
public TabFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position){
Fragment fragment=null;
switch (position){
case 0:
fragment=new tab1Fragment();
break;
case 1:
fragment=new tab2Fragment();
break;
case 2:
fragment=new tab3Fragment();
break;
default:
fragment=null;
break;
}
return fragment;
}
@Override
public CharSequence getPageTitle(int position){
return title[position];
}
@Override
public int getCount(){
return title.length;
}
}
当我运行错误时
java.lang.NullPointerException
请帮忙
在您的
AppCompatActivity
中您已发送
tab1Fragment fragobj = new tab1Fragment();
fragobj.setArguments(bundle);
但是在你的
TabFragmentPagerAdapter
fragment=new tab1Fragment();
break;
它有空参数
内部开关
switch (position){
case 0:
fragment=new tab1Fragment();
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
fragment.setArguments(bundle);
break;
可能您会得到
NullPointerException
,因为您的片段在 getItem
内再次初始化,无需参数。
试试这个方法。
@Override
public Fragment getItem(int position){
Fragment fragment=null;
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
switch (position){
case 0:
fragment=new tab1Fragment();
fragment.setArguments(bundle);
break;
case 1:
fragment=new tab2Fragment();
break;
case 2:
fragment=new tab3Fragment();
break;
default:
fragment=null;
break;
}
return fragment;
}
注意:确保您在 MainActivity 和 tab1Fragment 中导入相同版本的 Fragment。
我认为您首先通过 On call of Youractivity 启动 Tab1Frament() 您可以做到...
用过这个..
if (savedInstanceState == null) {
FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
tab1Fragment fragobj = new tab1Fragment();
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
// set Fragmentclass Arguments
fragobj.setArguments(bundle);
ft.replace(R.id.frame, fragobj);
ft.addToBackStack(null);
ft.commit();
}
而不是
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
// set Fragmentclass Arguments
tab1Fragment fragobj = new tab1Fragment();
fragobj.setArguments(bundle);
在片段中创建一个函数来传递来自 Activity 的数据,就像在
getters
和 setters
中为对象类所做的那样:
// Fragment
class TabFragment extends Fragment{
public String myDataString;
...
public void setTabInfo(String myActivityString){
this.myDataString = myActivityString;
}
}
// Activity
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
TabFragment frag = new TabFragment();
frag.setTabInfo("data From Activity");
}
我更喜欢这种方法,因为在对象的情况下使用
Bundle
时,您可以直接传递数据,而无需序列化对象
我也遇到过这个问题。它为我赢得了它。 我在片段活动中声明了
public static String customerId;
在我收到的片段中,仅通过写作来引用
customerId
我不擅长编程。也许这会对某人有帮助
也许答案很晚,但有一些对我有用的东西:
将您的捆绑包发送到适配器:
Bundle bundle = new Bundle();
bundle.putString("edttext", "data From Activity");
pager.setAdapter(new TabFragmentPagerAdapter(getSupportFragmentManager(), bundle));
在适配器中扩展构造函数:
Bundle bundle;
public TabFragmentPagerAdapter(FragmentManager fm, Bundle bundle) {
super(fm);
this.bundle=bundle;
}
并将其发送到片段:
switch (position){
case 0:
fragment=new tab1Fragment();
fragment.setArguments(bundle);
break;
希望有帮助。 }