2016-06-16 3 views
1

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

ответ

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

Эй спасибо за ответ. Если я делаю 'args.putStringArrayList (ARG_BUTTONS_TEXT, buttonStrings);' Я получаю сообщение об ошибке на кнопкеStrings, говоря, что второй параметр неверен, он нашел 'java.lang.String []', и для этого требуется 'java.util.ArrayList '. Поэтому я изменил параметр 'args.putStringArrayList' на' args.putStringArray', но это все равно возвращает нулевое значение. Должен ли я делать новый ArrayList (Arrays.asList («один, два, три, четыре»)) вместо 'new String [] {« один, два, три, четыре »} в классе« TestOne » – user1446988

+0

Не могли бы вы отправить код в 'addSlide'? Возможно, вы не используете тот же экземпляр фрагмента –

+0

Извините за задержанный ответ. Я добавил код «addlide» на мой вопрос – user1446988

Смежные вопросы