Добавление кнопок к фрагментам динамически - PullRequest
0 голосов
/ 07 мая 2018

Я пытался динамически добавлять кнопки в свой фрагмент, но все методы, которые я пробовал, почему-то не работают.

Вот некоторые методы, которые я пробовал:

1

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

LinearLayout linearlayout = new LinearLayout(getActivity());

        LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

        linearlayout.setLayoutParams(buttonParams);
        linearlayout.setOrientation(LinearLayout.HORIZONTAL);

        Button button = new Button(getActivity());
        button.setLayoutParams(buttonParams);
        button.setText("????????????????????");
        button.setTextSize(16);

        Button button2 = new Button(getActivity());
        button2.setLayoutParams(buttonParams);
        button2.setText("!!!!!!!!!!!!!!!!!!");
        button2.setTextSize(64);

        linearlayout.addView(button);
        linearlayout.addView(button2);

        container.addView(linearlayout);
        View myView = inflater.inflate(R.layout.fragment_general_layout, container, false);

 return myView;

    }

Это даст мне следующий скриншот Первый метод . Мне действительно не нравится это, поскольку это создаст кнопку на самой Деятельности, которая появится на моих других Фрагментах, которые используют ту же самую Деятельность.

  1. Для второго метода

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

View myView = inflater.inflate(R.layout.fragment_general_layout, container, false);


            for (int i = 0; i < ArrayOfNames.length; i++) {

                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);

                Button btn = new Button(myView.getContext());
                btn.setId(i);
                final int id_ = btn.getId();
                btn.setText(ArrayOfNames[i]);
                btn.setBackgroundColor(Color.CYAN);
                btn.setLayoutParams(params);
                linearlayout.addView(btn, params);
                btn = myView.findViewById(id_);

                btn.setVisibility(View.VISIBLE);

                btn.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                            //do smth


                    }
                });
return myView;
}

Этот метод, как я предполагаю, создаст кнопки (так как код работает нормально, и, по крайней мере, кнопки не имеют ссылок на нулевой указатель при настройке OnClickListner (). Но я не вижу реальных кнопок на моем Также невозможно щелкнуть по нему.

Я пытался ссылаться на эти urls: Программно добавить кнопки к фрагменту

Программное добавление кнопок к фрагменту

Как программно добавить кнопку во фрагмент

Любая помощь будет по достоинству оценена.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

В конце концов, мне удалось это сделать. Второй метод имел проблему, так как нет

btn = myView.findViewById(id_);. Это будет указывать на ноль, хотя я установил идентификатор моей кнопки равным указанному мной значению. Используя этот метод, легко получить значение кнопки, установив отдельный метод onClick().

            for (int i = 0; i < ArrayOfNames.length; i++) {

                final Button myButton = new Button(myView.getContext());
                myButton.setText(RAnames[i]);
                myButton.setId(i + 1);
                myButton.setOnClickListener(this);

                myButton.setBackgroundColor(getResources().getColor(R.color.colorAccent));
                myButton.setTextSize(18);
                myButton.setPadding(20, 0, 20, 0);

                LinearLayout linearlayout = (LinearLayout) myView.findViewById(R.id.btnholder);
                linearlayout.setOrientation(LinearLayout.VERTICAL);

                LinearLayout.LayoutParams buttonParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);
                buttonParams.setMargins(0, 0, 0, 10);

                linearlayout.addView(myButton, buttonParams);
}
0 голосов
/ 07 мая 2018

Метод onCreateView ожидает, что вы вернете представление, которое вы надували. Ваш код хорош, но вы добавляете кнопки в неправильный вид. Попробуйте вместо этого:

//container.addView(linearlayout);
myView = inflater.inflate(R.layout.fragment_general_layout, container, false);
myView.addView(linearlayout);

Это должно добавить ваши кнопки к вашему виду. Я предполагаю, что ваш R.layout.fragment_general_layout это LinearLayout с orientation="vertical"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...