我试图动态添加String[]
中项目的按钮。
我的方法是以编程方式添加与数组中的项目一样多的按钮,并为每个按钮分配该数组中的文本。 (我了解如何从项目中以编程方式添加按钮。)
我的问题是无法将String[] buttonStrings
从课程TestOne
传递到片段FragmentTest
。
String[] buttonStrings
的日志返回null,但是它返回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();
}
答案 0 :(得分:1)
您可以使用标记buttonStrings.toString()
设置数据
但您正在尝试使用以下内容获取数据:String.format(String.valueOf(ARG_BUTTON_TEXTS_STRINGS))
。
这些标签是不同的,这就是你获得空数组的原因。
您应该将标记定义为常量:
private static final String ARG_BUTTONS_TEXT = "buttons";
然后在你的newInstance中:
public static FragmentTest newInstance(String title, String[] buttonStrings) {
FragmentTest sampleSlide = new FragmentTest();
Bundle args = new Bundle();
args.putString(ARG_TITLE, title);
args.putStringArray(ARG_BUTTONS_TEXT, buttonStrings);
sampleSlide.setArguments(args);
return sampleSlide;
}
在你的onCreate:
getArgButtonTextsStrings = getArguments().getStringArray(ARG_BUTTONS_TEXT);