Как создать кнопку в фрагменте используя код?
Мне нужно создать кнопку в фрагменте кодом Но этот способ не работает.
Button btn = new Button(myFragment.this.getContext());
myListView.addView(btn);
Выводит ошибку с таким текстом:
"Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference"
Я пытался сделать это иначе в методе onCreateView:
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_list, container, false);
ll = rootView.findViewById(R.id.list_linear);
thisContext = container.getContext();
Button btn = new Button(thisContext);
ll.addView(btn);
return inflater.inflate(R.layout.fragment_list, container, false);
}
Но это тоже не сработало..
(list_linear это мой Linear View)
Как сделать это?
Ответы (1 шт):
myFragment.this.getContext() будет возвращать null пока не определенный код, потому у вас не работал первый вариант. Второй, в общем-то, должен работать, если не закравшаяся ошибка. Вы создаете из xml новую вьюшку, добавляете в нее кнопку, созданную программно, и забиваете на созданню вьюшку. В return вы заново создаете вьюшку из xml и возвращаете результат, обнуляя все предыдущие действия. замените на return rootView и уже должно заработать. Еще может потребоваться добавить к Button аналог xml-атрибутов с помощью LayoutParams. Если ll - это LinearLayoyt, то это будет как-то так:
...
Button btn = new Button(thisContext);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
btn.setLayoutParams(lp);
ll.addView(btn);
return rootView;
А вообще не вижу причин не добавить кнопку в xml разметку в вашем случае