gpt4 book ai didi

android - 以编程方式从 String[] 添加按钮

转载 作者:行者123 更新时间:2023-11-30 01:15:55 24 4
gpt4 key购买 nike

我正在尝试从 String[] 中的项目动态添加按钮。我的方法是以编程方式添加与数组中的项目一样多的按钮,并从该数组中为每个按钮分配一个文本。 (我了解如何从项目中以编程方式添加按钮)。

我的问题是无法将类 TestOne 中的 String[] buttonStrings 传递给 fragment 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 fragment

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();
}

最佳答案

您使用标签设置数据:buttonStrings.toString()
但是您正在尝试使用以下方法获取数据:String.format(String.valueOf(ARG_BUTTON_TEXTS_STRINGS))

这些标签不同,这就是您得到空数组的原因。

您应该将标签定义为常量:

private static final String ARG_BUTTONS_TEXT = "buttons";

然后在你的新实例中:

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);

关于android - 以编程方式从 String[] 添加按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37864721/

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