gpt4 book ai didi

android - 在实现 viewpager 的 fragment 中访问 getString()

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:04:44 24 4
gpt4 key购买 nike

我正在使用一个使用 SherlockFragment 的嵌套 fragment ,一切正常。但是我无法将 viewpager 标题设为字符串,因此我无法使用 string.xml 支持多语言。

这是我的代码

public class schedule_pl  extends SherlockFragment {


private static String titles[] = new String[] { "Portugal", "Lisbon" , "Azores" };

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main_pager, container, false);
// Locate the ViewPager in viewpager_main.xml
ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
// Set the ViewPagerAdapter into ViewPager
mViewPager.setAdapter(new MyAdapter (getChildFragmentManager()));
return view;
}

@Override
public void onDetach() {
super.onDetach();
try {
Field childFragmentManager = Fragment.class
.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}


public static class MyAdapter extends FragmentPagerAdapter {

public MyAdapter(FragmentManager fm) {
super(fm);
}


@Override
public Fragment getItem(int position) {
switch(position)
{
case 0:
return new place();
case 1:
return new place2();
case 2:
return new place3();

}
return null;
}




@Override
public CharSequence getPageTitle(int position) {
return titles[position];
}

@Override
public int getCount() {
// Show 3 total pages.
return 3;
}
}


public static class place extends Fragment {

public place() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment1, container,
false);
return rootView;
}
}
public static class place3 extends Fragment {

public place3() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment2, container,
false);
return rootView;
}
}
public static class place2 extends Fragment {

public place2() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment3, container,
false);
return rootView;
}
}

在 getPageTitle 上我无法使用字符串并且已经尝试了几种方法。

Access to getString() in android.support.v4.app.FragmentPagerAdapter?这是网站上的一个类似问题,但没有一个答案让我走上了正确的道路。

我试过用这个:

@Override
public CharSequence getPageTitle(int position) {
Locale l = Locale.getDefault();
switch (position) {
case 0:
return getcontext.getString(R.string.title_section_schedule1).toUpperCase(l);
case 1:
return getcontext.getString(R.string.title_section_schedule2).toUpperCase(l);
case 2:
return getcontext.getString(R.string.title_section_schedule3).toUpperCase(l);
}
return null;
}

但是不工作。有人知道这个的解决方案吗?

最佳答案

您可以将 Activity 传递给您的适配器构造函数。

mViewPager.setAdapter(new MyAdapter (getChildFragmentManager(), getActivity()));

然后在 MyAdapter 中:

//declare a private variable for the activity
private Activity myActivity;
public MyAdapter(FragmentManager fm, Activity myActivity) {
super(fm);
this.myActivity = myActivity;
}

然后在你的 getPageTitle

...
return myActivity.getString(R.String.title_section_scheduale1).toUpperCase(l);
...

尝试一下,希望对您有用。

关于android - 在实现 viewpager 的 fragment 中访问 getString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23306147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com