我有一个Tab布局,在我的主要活动中通过适配器添加了标签。我需要通过addFrag传递一个变量(因为每个json条目创建每个frag)。见下文;
主要活动 - FragmentPagerAdapter
static class Adapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public Adapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
主要活动 - 制表符
Adapter adapter = new Adapter(getSupportFragmentManager());
adapter.addFragment(new DashboardTabs(), "Home");
adapter.addFragment(new TeamsNewTabs(), "Teams" + _teamCount + "");
adapter.addFragment(new FixturesNewTabs(), "Fixtures" + _fixturesCount + "");
adapter.addFragment(new ResultsNewTabs(), "Results"+ _resultsCount + "");
//send var through to the fragment like so ...
//not sure how to get the "var" to even pass through ...
String var = "my Tab Name";
adapter.addFragment(new MyFragment(var), var);
viewPager.setAdapter(adapter);
MyFragment - 访问时获取var。
public class MyFragment extends Fragment {
//not sure how to get the var or if it even passes through ...
private getVar = var;
}
在这种情况下是否可以做到这一点,或者我认为这是错误的方式。
答案 0 :(得分:0)
像这样:在提交片段之前:
pop
在片段中:
Bundle b=new Bundle();
b.putInt("cid",44);
b.putString("title","name");
fragment.setArguments(b);
答案 1 :(得分:0)
传递值:
Bundle bundle1 = new Bundle();
bundle1.putSerializable("var","my Tab Name");
Fragment fragment = new MyFragment();
fragment.setArguments(bundle1);
adapter.addFragment(fragment);
MyFragment:
public class MyFragment extends Fragment {
.
.
.
//get value
if(getActivity().getArguments().getStringExtra("var")!=null)
{
String var_value=getActivity().getArguments().getStringExtra("var");
}
}
答案 2 :(得分:0)
使用参数包更新您的方法。像这样:
public void addFragment(Fragment fragment, String title, Bundle args) {
fragment.setArguments(args);
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
现在将其用作:
Bundle argsBundle=new Bundle();
argsBundle.putString("data","your_data");
adapter.addFragment(new MyFragment(var), var, argsBundle); //while adding fragment.
onCreateView()
的{{1}}内部
MyFragment.java
快乐的编码。
答案 3 :(得分:0)
每个Parcelable
对象都可以通过Bundle传递给片段或活动。是的,您可以通过fragment
构造函数传递您的String变量值强>但这不是一个好习惯。我告诉你原因 -
如果Android决定稍后重新创建Fragment
,它将调用片段的无参数构造函数。所以重载构造函数不是一个解决方案。
话虽如此,将内容传递给Fragment
以便在Android重新创建Fragment
后可用的方法是将包传递给{{1 }} 方法。
所以,如果我们想将一个String传递给片段,我们会使用类似的东西:
setArguments
在片段public static DashboardTabs newInstance(String someString) {
DashboardTabs mF = new DashboardTabs();
Bundle args = new Bundle();
args.putString("key_string", someString);
mF.setArguments(args);
return mF;
}
中,您可以使用以下命令访问onCreate()
String
getArguments().getString("key_string", "");
加点,如果重新创建片段,您的Bundle
仍然可用。
最后,您的addFragment
方法可用作 -
adapter.addFragment(DashboardTabs.newInstance(yourStringValue), "Home");
方法来自 - SO link和Official documentation