【发布时间】:2016-06-16 16:30:55
【问题描述】:
我正在尝试从 String[] 中的项目动态添加按钮。
我的方法是以编程方式添加与数组中的项目一样多的按钮,并为每个按钮分配该数组中的文本。 (我了解如何从项目中以编程方式添加按钮)。
我的问题是无法将 String[] buttonStrings 从类 TestOne 传递给片段 FragmentTest。
日志为String[] buttonStrings 返回空值,但它为String title 返回正确的值。
我的猜测是我没有在某处初始化String[] buttonStrings。或者也许我的方法不正确。
这是我的TestOne 班级
public class TestOne extends ActualFragmetIntro {
@Override
public void init(Bundle savedInstanceState) {
addSlide(FragmentTest.newInstance("This is the string from TestOne", new String[]{"Button1 Text, Button2 Text ,Button3 text , Button4 Text"}));
下面是我的 FragmentTest 片段
public class FragmentTest extends Fragment {
private static final String ARG_TITLE = "title";
private static final String[] ARG_BUTTON_TEXTS_STRINGS = {"buttons_texts"};
//private static final String ARG_BUTTON_TEXTS_STRINGS = {"buttons_texts"};
//private static final ArrayList<String> ARG_BUTTON_TEXTS_STRINGS = new ArrayList<String>();
public static FragmentTest newInstance(String title, String[] buttonStrings) {
FragmentTest sampleSlide = new FragmentTest();
Bundle args = new Bundle();
args.putString(ARG_TITLE, title);
args.putStringArrayList(buttonStrings.toString(), ARG_BUTTON_TEXTS_STRINGS);
sampleSlide.setArguments(args);
return sampleSlide;
}
public static FragmentTest newInstance(String title, String[] buttonStrings) {
FragmentTest sampleSlide = new FragmentTest();
Bundle args = new Bundle();
args.putString(ARG_TITLE, title);
args.putStringArrayList(buttonStrings.toString(), ARG_BUTTON_TEXTS_STRINGS);
sampleSlide.setArguments(args);
return sampleSlide;
}
private String[] getArgButtonTextsStrings = new String[0];
public FragmentTest() {
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
....
if (getArguments() != null && getArguments().size() != 0) {
title = getArguments().getString(ARG_TITLE);
getArgButtonTextsStrings = getArguments().getStringArray(String.format(String.valueOf(ARG_BUTTON_TEXTS_STRINGS)));
System.out.println("logged onCreate " + title +" "+ getArgButtonTextsStrings );
}
}
...
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser&& isResumed()){
title = getArguments().getString(ARG_TITLE);
getArgButtonTextsStrings = getArguments().getStringArray(String.format(String.valueOf(ARG_BUTTON_TEXTS_STRINGS)));
}else {
}
}
编辑添加addSlide代码
public abstract class ActualFragmetIntro extends FragmentActivity implements SceneIntroFragment4Objects.ClickCounterListener, TextToSpeech.OnInitListener {
private PagerIntroAdapter mPagerAdapter;
private ViewPager pager;
private List<Fragment> fragments = new Vector<>();
...
public void addSlide(@NonNull Fragment fragment) {
fragments.add(fragment);
mPagerAdapter.notifyDataSetChanged();
}
【问题讨论】:
标签: android arrays string android-fragments