2016-07-28 2 views
-1

Прежде всего, простите меня, если это глупый вопрос, потому что я относительно новичок в этой области. Итак, у меня есть activity, который содержит фрагмент. Этот фрагмент имеет три кнопки. И когда щелкнули любую из этих кнопок, я хотел отобразить конкретный Toast messages. Я использовал метод onClick(), который отлично работает в действии. Но когда я использую то же самое во фрагменте, приложение падает. Пожалуйста, помогите мне в этом вопросе. Именом деятельности является «User.java», а его XML-файл - «activity_user.xml». Имя фрагмента «user_home.java» и его xml-файл «user_home_layout.xml».
Я приложил два изображения, первый содержит действие и его XML-файл, а второй - фрагмент и его sml-файл.Как отобразить тост-сообщение при нажатии кнопки в фрагменте?

1. Activity 2. Fragment

+1

Не могли бы вы опубликовать трассировку стека приложения при столкновении? – NitroNbg

+0

Для краха может быть по крайней мере две возможные причины. 1) 'buttonInFragment = (Button) view.findViewById (R.id.buttonInFragment);' 'buttonInActivity = (Button) findViewById (R.id.buttonActivity);' 'Toast.makeText (MainActivity.this," Toast for (toast.Length_Short) .show() ' –

+0

@NitroNbg: Это ошибка, которую я получаю: 'toast.Length_Short. java.lang.IllegalStateException: Не удалось найти метод ButtonClick (View) в родительском или предком Контекст для android: атрибут onClick, определенный в классе вида android.support.v7.widget.AppCompatButton с идентификатором 'GOT' ' –

ответ

3

Вы должны установить пользовательские OnClickListener к кнопке:

yourButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getActivity(), "your toast text", Toast.LENGTH_LONG).show(); 
      } 
     }); 
+0

Это сработало. Благодаря тонну! –

4

Вы вмятина кнопку найти в вашем фрагменте,

@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; 
    } 
}  
1

В вашей деятельности:

Toast.makeText(YourActivity.this, "your message", Toast.LENGTH_SHORT).show(); 

В вашем фрагменте:

Toast.makeText(this.getActivity(), "your message", Toast.LENGTH_SHORT).show(); 
+0

Изменение используемого контекста не будет устранять проблему пользователя –

1

@TonyMathew, добро пожаловать в Android мире. Ваша реализация ButtonClick неверна. This - это обширное учебное пособие по использованию фрагментов. Также есть пример обработки событий кликов. Короче говоря, вам нужно найти свои кнопки в макете xml по id. НЕ ИСПОЛЬЗУЙТЕ ТЕКСТ КНОПКИ!

Пожалуйста, найдите в Интернете информацию, прежде чем размещать вопрос здесь. Скорее всего, вы найдете то, что ищете!

P.S. Обычно в Java вы должны назвать ваш класс следующим образом: ClassName.java и не class_name.java

+0

Прежде всего хочу отметить, что этот ответ должен быть определенно комментарием, а второй - тем, что нет проблемы с поиском кнопки по имени. –

+0

@Todor Kostov: Дело в том, что я очень сильно смущен при обработке щелчков кнопок. –

+0

@lulian Popescu, прежде всего, ответ не должен быть комментарием, основанным на том, что он предоставляет полезную информацию по этому вопросу, а во-вторых - возникает большая проблема при использовании метки кнопки для идентификации. Что произойдет, если вы попытаетесь локализовать свое приложение? Если у вас есть следующий «Продолжить» (английский) и «Продължи» (болгарский перевод) в качестве текста для той же кнопки, ваша логика не будет работать! –

1

Просто поместите getActivity() в контексте makeText(), как это:

Toast.makeText(getActivity(), "Your message", Toast.LENGTH_SHORT).show(); 
+0

Использование 'getActivity' изменяет только используемый контекст, а не решает проблему –

1

Проблема в том, что ваш метод не найден в активности, и поэтому возникает исключение (методы из фрагментов здесь не учитываются).Чтобы исправить это у вас есть 2 варианта:

  1. Перенести метод ButtonClick активности и сделать некоторые небольшие изменения (вы должны получить в другом образом Context) и сохранить XML-файл то же самое;
  2. Комплект onClickListener для кнопки и ручки onClick событие внутри слушателя.
Смежные вопросы