#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);