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

#android #url #android-fragments #actionlistener #layout-inflater

#Android #url #android-фрагменты #actionlistener #макет-надуватель

Вопрос:

у меня есть один класс, который извлекает фрагмент, и внутри него я хочу создать кнопку, содержащую некоторый usrl-адрес. как этого добиться? я пытался, но это дало мне ошибку, пожалуйста, посмотрите на мой код и дайте несколько предложений.

мой код класса Java

 public class McaFragment extends Fragment  {


Button button;


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


        View rootView = inflater.inflate(R.layout.fragment_mca, container, false);


        addListenerOnButton();

        return rootView;

    }

    public void addListenerOnButton() {

        button = (Button) findViewById(R.id.button1); //getting error here in //findViewById

        button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

              Intent browserIntent = 
                            new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.mkyong.com"));
                startActivity(browserIntent);

            }

        });

    }

}  
 

Комментарии:

1. Я дал ответ ранее… и это было правильно с самого начала. Но хорошо…

2. я могу проголосовать только сейчас, Зоран и я это сделали 🙂 надеюсь, вы не возражаете…

3. Я заметил. Вот почему я проголосовал за ваш ответ, так что теперь он не равен -1 ;). Я не возражаю

4. хехее большое спасибо, братан 🙂 ты такой хороший человек (у)

5. кажется, вы тоже увлечены Android. если вы хотите присоединиться ко мне на fb… добро пожаловать, чтобы мы могли обсуждать проблемы друг с другом ( facebook.com/ramanrayat7?ref=tn_tnmn )

Ответ №1:

Вы не можете напрямую использовать findViewById in fragment, вам нужно сначала вызвать контекст вашего действия:

пример:

 getActivity().findViewById(R.id.button1);
 

если вы хотите использовать кнопку в представлении вашего фрагмента, вам нужно передать свой вид в параметре вашего addListenerOnButton

пример:

//////// addListenerOnButton(rootView);

  public void addListenerOnButton(View v) {

    button = (Button) v.findViewById(R.id.button1); //getting error here in //findViewById

    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

          Intent browserIntent = 
                        new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.mkyong.com"));
            startActivity(browserIntent);

        }

    });

}
 

Комментарии:

1. это решает мою ошибку, но мой код по-прежнему не работает …. появляется ошибка во время выполнения …. пожалуйста, просмотрите мой код и помогите мне.

2. привет, большое спасибо, ты сэкономил мое время 🙂 чем ты так много занимаешься 🙂

3. переполнение стека — это круто

Ответ №2:

Если ваша кнопка находится в вашем макете фрагмента, вы должны поместить:

 button = (Button) rootView.findViewById(R.id.button1);
 

Перед этим вы должны поместить rootView в глобальную переменную под кнопкой Button. Итак:

 Button button;
View rootView;
 

и позже в onCreateView:

 rootView = inflater.inflate(R.layout.fragment_mca, container, false);