Im Попытка динамически добавлять кнопки из элементов в String[]
. Мой подход состоит в том, чтобы программно добавить столько кнопок, сколько элементов в массиве, и назначить каждой кнопке текст из этого массива. (Я понимаю, как программно добавлять кнопки из элементов).Программно добавление кнопок из строки []
Моя проблема не в состоянии передать String[] buttonStrings
из класса TestOne
на фрагмент FragmentTest
.
Журнал возвращает null для 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 {
}
}
EDIT Добавлен 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();
}
Эй спасибо за ответ. Если я делаю 'args.putStringArrayList (ARG_BUTTONS_TEXT, buttonStrings);' Я получаю сообщение об ошибке на кнопкеStrings, говоря, что второй параметр неверен, он нашел 'java.lang.String []', и для этого требуется 'java.util.ArrayList '. Поэтому я изменил параметр 'args.putStringArrayList' на' args.putStringArray', но это все равно возвращает нулевое значение. Должен ли я делать новый ArrayList (Arrays.asList («один, два, три, четыре»)) вместо 'new String [] {« один, два, три, четыре »} в классе« TestOne » –
user1446988
Не могли бы вы отправить код в 'addSlide'? Возможно, вы не используете тот же экземпляр фрагмента –
Извините за задержанный ответ. Я добавил код «addlide» на мой вопрос – user1446988