2015-01-29 6 views
0

У меня есть TextView в моем MainActivity и Button, который находится в Fragment, прикрепленной к MainActivity. Когда я нажимаю Button, я хочу, чтобы TextView сказал: «Кнопка нажата».Передача данных от фрагмента к MainActivity

Возможно ли это?

Я знаю, что два Fragments, прикрепленные к тому же Activity, могут легко связываться друг с другом и отправлять данные друг другу. Но может ли объект в Fragment передачи данных к объекту в Activity

Что лучше программирования, чтобы сделать TextViewFragment свои собственные и прикрепить ее к Activity? Тогда я могу просто передать эти два фрагмента друг другу.

Извините, если это не правильный вопрос для StackOverflow. Я новичок в Fragments и не смог найти четкое объяснение по этой проблеме.

Заранее благодарен!

+0

разместим ваш код пожалуйста –

ответ

4

Принимаемый в настоящее время ответ (использование статического метода в Activity) является нечетным и, возможно, «неправильным».

Использование статического метода является нечетным, поскольку ему просто не нужно статично.

Это неправильно, потому что Фрагмент должен знать информацию о конкретной Деятельности, в которой он размещен. Это «плотная связь», а также делает так, что фрагмент не может использоваться повторно.

Есть два распространенных способа решения этой проблемы:

  1. Создать интерфейс, содержащий методы в деятельности, которые могут быть вызваны фрагментом. Внесите этот интерфейс в Activity (все действия, которые используют фрагмент), а затем в Fragment, используйте getActivity(), чтобы получить Activity, и передать его в интерфейс.В этом шаблоне также обычно проверяется (используя «instanceof»), реализует ли Activity интерфейс и выбрасывает исключение RuntimeException, если это не так.
  2. Используйте Event Bus (например, Otto Square, GreenRobot EventBus) для связи между Фрагментом и его родительской активностью. Я чувствую , что это самое чистое решение, и полностью абстрагирует Фрагмент от его активности.
+0

кажется законным. Я буду реализовывать это в своем коде, и если он работает, это похоже на более правильное решение – user2456977

0

Вы пробовали метод getActivity(), чтобы получить ссылку на родительских деятельности и использовать метод для установки данных, что-то вроде:

// public final Activity getActivity() 
MyActivity activity = (MyActivity) getActivity(); 
activity.setText("..."); 

Я могу ошибаться, но я хотел бы попробовать это.

1

В своей деятельности вы можете создать статический метод, который будет содержать TextView внутри него. И когда вам нужно обновить, просто назовите его из фрагмента. что-то вроде:

В деятельности:

public static void updateText(){ 
//your textview 
text.setText("Button Clicked"); 
} 

Просто позвоните, когда вы нажмете на кнопку из фрагмента.

что-то вроде:

Из фрагмента:

//Inside Button click listener 
MainActivity.updateText(); 

Не тестировался, но надеюсь, что этот подход будет работать.

+1

спасибо это прекрасно работает - просто немного подправить: государственной статической силы UPDATETEXT (данные String) { text.setText ("данные"); } MainActivity.updateText (кнопка нажата); --- Мне не нужно было бросать или использовать getActivity, так как моя функция статична. – user2456977

+1

Оба эти решения - довольно плохие идеи. В частности, Фрагмент не должен знать, на какой активности он размещен. См. Мой ответ для других способов сделать это. – GreyBeardedGeek

Смежные вопросы