Как создать кнопку в фрагменте используя код?

Мне нужно создать кнопку в фрагменте кодом Но этот способ не работает.

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 разметку в вашем случае

→ Ссылка