Прежде всего, простите меня, если это глупый вопрос, потому что я относительно новичок в этой области. Итак, у меня есть activity
, который содержит фрагмент. Этот фрагмент имеет три кнопки. И когда щелкнули любую из этих кнопок, я хотел отобразить конкретный Toast messages
. Я использовал метод onClick()
, который отлично работает в действии. Но когда я использую то же самое во фрагменте, приложение падает. Пожалуйста, помогите мне в этом вопросе. Именом деятельности является «User.java», а его XML-файл - «activity_user.xml». Имя фрагмента «user_home.java» и его xml-файл «user_home_layout.xml».
Я приложил два изображения, первый содержит действие и его XML-файл, а второй - фрагмент и его sml-файл.Как отобразить тост-сообщение при нажатии кнопки в фрагменте?
ответ
Вы должны установить пользовательские OnClickListener к кнопке:
yourButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "your toast text", Toast.LENGTH_LONG).show();
}
});
Это сработало. Благодаря тонну! –
Вы вмятина кнопку найти в вашем фрагменте,
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.user_home_layout, container, false);
btn1=(Button)view.findViewById(R.id.GOT);
btn2=(Button)view.findViewById(R.id.SH);
btn3=(Button)view.findViewById(R.id.TD);
return view;
}
, а затем реализовать и в тосте просто используйте getActivity()
Toast.makeText(getActivity(), "Game Of Thrones", Toast.LENGTH_SHORT).show();
реализовать метод
public void ButtonClick(View v) {
switch(v.getId()) {
case R.id.GOT:
Toast.makeText(getActivity(), "Game of Thornes", Toast.LENGTH_LONG).show();
break;
case R.id.SH:
Toast.makeText(getActivity(), "Sherlock", Toast.LENGTH_LONG).show();
break;
case R.id.TD:
Toast.makeText(getActivity(), "True Detective", Toast.LENGTH_LONG).show();
break;
}
}
В вашей деятельности:
Toast.makeText(YourActivity.this, "your message", Toast.LENGTH_SHORT).show();
В вашем фрагменте:
Toast.makeText(this.getActivity(), "your message", Toast.LENGTH_SHORT).show();
Изменение используемого контекста не будет устранять проблему пользователя –
@TonyMathew, добро пожаловать в Android мире. Ваша реализация ButtonClick неверна. This - это обширное учебное пособие по использованию фрагментов. Также есть пример обработки событий кликов. Короче говоря, вам нужно найти свои кнопки в макете xml по id. НЕ ИСПОЛЬЗУЙТЕ ТЕКСТ КНОПКИ!
Пожалуйста, найдите в Интернете информацию, прежде чем размещать вопрос здесь. Скорее всего, вы найдете то, что ищете!
P.S. Обычно в Java вы должны назвать ваш класс следующим образом: ClassName.java и не class_name.java
Прежде всего хочу отметить, что этот ответ должен быть определенно комментарием, а второй - тем, что нет проблемы с поиском кнопки по имени. –
@Todor Kostov: Дело в том, что я очень сильно смущен при обработке щелчков кнопок. –
@lulian Popescu, прежде всего, ответ не должен быть комментарием, основанным на том, что он предоставляет полезную информацию по этому вопросу, а во-вторых - возникает большая проблема при использовании метки кнопки для идентификации. Что произойдет, если вы попытаетесь локализовать свое приложение? Если у вас есть следующий «Продолжить» (английский) и «Продължи» (болгарский перевод) в качестве текста для той же кнопки, ваша логика не будет работать! –
Просто поместите getActivity() в контексте makeText(), как это:
Toast.makeText(getActivity(), "Your message", Toast.LENGTH_SHORT).show();
Использование 'getActivity' изменяет только используемый контекст, а не решает проблему –
Проблема в том, что ваш метод не найден в активности, и поэтому возникает исключение (методы из фрагментов здесь не учитываются).Чтобы исправить это у вас есть 2 варианта:
- Перенести метод
ButtonClick
активности и сделать некоторые небольшие изменения (вы должны получить в другом образомContext
) и сохранить XML-файл то же самое; - Комплект
onClickListener
для кнопки и ручкиonClick
событие внутри слушателя.
Не могли бы вы опубликовать трассировку стека приложения при столкновении? – NitroNbg
Для краха может быть по крайней мере две возможные причины. 1) 'buttonInFragment = (Button) view.findViewById (R.id.buttonInFragment);' 'buttonInActivity = (Button) findViewById (R.id.buttonActivity);' 'Toast.makeText (MainActivity.this," Toast for (toast.Length_Short) .show() ' –
@NitroNbg: Это ошибка, которую я получаю: 'toast.Length_Short. java.lang.IllegalStateException: Не удалось найти метод ButtonClick (View) в родительском или предком Контекст для android: атрибут onClick, определенный в классе вида android.support.v7.widget.AppCompatButton с идентификатором 'GOT' ' –