Intereting Posts
Google maps v2, отсутствует 'android.support.v4.app.FragmentActivity' Общие сведения о лицензировании приложений для Android Хранение растрового изображения на SD-карте, потерявшее качество изображения 'Android.support.test.espresso не существует', когда я хочу использовать его для отдельного теста apk Android: событие сенсорного экрана через ADB Обнаруживать, когда фрагмент рисуется? Listview onItemClick иногда не отвечает Основные настройки Samsung Galaxy S II AVD (Android Virtual Device)? Форматировать кредитную карту в текстовом редакторе в android Javax.net.ssl.SSLException: SSL-рукопожатие отменено на старых устройствах Android Android: запись и получение объекта Как проверить подключение к Интернету в Android? Как применить цвет LUT к растровым изображениям для эффектов фильтра в android? Как избежать двойного пробела между элементами при использовании RecyclerView с помощью StaggeredGridLayoutManager? Метод Movement Link Movement блокирует listitem

Фрагмент-фрагмент связи в Android

Я на начальном уровне в Android-программировании, поэтому мне нужна ваша искренняя помощь для этого. Кто-нибудь мне поможет.

Я пытаюсь создать SLIDING UI, используя фрагменты

Поэтому я действительно сомневаюсь … У меня есть Fragment (скажем, Fragment A), в нем есть TextView и Button и другой Fragment (скажем, Fragment B). В нем есть TextView . Мне нужно показать содержимое TextView Fragment A TextView Fragment B, когда я нажал Button в ФРАГМЕНТЕ А. Я пробовал много способов, к сожалению, у меня не было надлежащего вывода. Я уверен, что вы, народы, знаете об этом. Пожалуйста, помогите мне.

спасибо

Это должно быть сделано слушателем, так что фрагменты все еще не зависят друг от друга и могут использоваться в одном или двух режимах. Активность должна обрабатывать слушатели обоих фрагментов.

Вот пример активности с двумя фрагментами:

 package com.example; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import com.example.fragment.FragmentA; import com.example.fragment.FragmentA.TextChangeListener; import com.example.fragment.FragmentB; public class ActivityAB extends FragmentActivity { FragmentA fragmentA; FragmentB fragmentB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ab); FragmentManager manager = getSupportFragmentManager(); fragmentA = (FragmentA) manager.findFragmentById(R.id.fragmentA); fragmentB = (FragmentB) manager.findFragmentById(R.id.fragmentB); fragmentA.setTextChangeListener(new TextChangeListener() { @Override public void onTextChange(CharSequence newText) { fragmentB.updateTextValue(newText); } }); } } 

Вот фрагмент A, который имеет пользовательский прослушиватель для события изменения текста.

 package com.example.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import com.example.R; public class FragmentA extends Fragment { TextChangeListener listener; public interface TextChangeListener { public void onTextChange(CharSequence newText); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_a, container, false); Button btn = (Button) view.findViewById(R.id.button1); final TextView textView = (TextView) view.findViewById(R.id.textView1); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (null != listener) { listener.onTextChange(textView.getText()); } } }); return view; } public void setTextChangeListener(TextChangeListener listener) { this.listener = listener; } } 

Вот фрагмент B, который имеет открытый метод для обновления текстового поля:

 package com.example.fragment; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.R; public class FragmentB extends Fragment { TextView textView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_b, container, false); textView = (TextView) view.findViewById(R.id.textView1); return view; } public void updateTextValue(CharSequence newText) { textView.setText(newText); } } 

Макет ActivityAB xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:baselineAligned="false" android:orientation="horizontal" > <fragment android:id="@+id/fragmentA" android:name="com.example.fragment.FragmentA" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> <fragment android:id="@+id/fragmentB" android:name="com.example.fragment.FragmentB" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" /> </LinearLayout> 

Фрагмент xml layout:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is text" android:textAppearance="?android:attr/textAppearanceLarge" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Show" /> </LinearLayout> 

Фрагмент B xml layout:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="(here will be text)" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> 

Звучит так, как будто ваша установка может быть чем-то вроде: MainActivity w / FragmentA [добавлено] и FragmentB [добавлено]. В этом случае я делегировал сообщения / действия между двумя фрагментами через MainActivity. Разрешение MainActivity для обработки сообщений / действий также облегчает «специальные» оркестровки, которые могут потребоваться в более сложной ситуации между фрагментами. Например:

 public interface FragmentCommunicator { public void sendMessage ( String broadcastMessage ); public void takeAction ( String name, int action, Fragment frag ); } public class MainActivity extends Activity implements FragmentCommunicator { Fragment fragA; Fragment fragB; ... @Override public void sendMessage ( String msg ) { if ( msg.Contains("Send To fragA") ) fragA.receiveMsg(msg); ... } @Override public void takeAction ( String name, int action, Fragment frag ) { if ( action == CLOSE ) removeFragment( name, frag ); ... } } public class FragmentA extends Fragment { ... @Override public void onClick(View v) { FragmentCommunicator inter = (FragmentCommunicator) getActivity(); inter.sendMessage("the txt/information/etc you want to send to fragB"); } } public class FragmentB extends Fragment { ... public void receiveMsg ( String msg ) { textView.setText(msg); } } 

Я забыл отправить часть отправки FragmentA. Надеюсь это поможет.

Связь между двумя фрагментами всегда должна осуществляться через их активность фрагментов, чтобы сохранить свободную связь между фрагментами. Поэтому, если вы хотите отправить некоторые данные из одного фрагмента A в другой фрагмент B, вы можете создать слушатель и реализовать его в своей активности фрагментов и Изнутри фрагмента А вы можете запустить событие с помощью этого слушателя и отправить данные в активность фрагмента. Таким образом, теперь активность фрагмента будет также иметь объект фрагмента B, и поэтому активность фрагмента может непосредственно вызвать метод фрагмента B и отправить данные фрагменту B …

Этот учебник отлично подходит для меня.

http://laaptu.wordpress.com/tag/android-passing-data-from-activity-to-fragment/

наслаждаться

developer.android.com

Чтобы позволить фрагменту связываться с его активностью, вы можете определить интерфейс в классе Fragment и реализовать его в рамках Activity. Фрагмент фиксирует реализацию интерфейса во время его жизненного цикла onAttach () и затем может вызвать методы интерфейса для связи с Activity.

Пример : – http://wiki.workassis.com/android-fragment-communication/

Ref: – https://developer.android.com/training/basics/fragments/communicating.html

На самом деле это довольно просто, просто выполните следующие действия:

  1. Таким образом, вы создали два фрагмента A и B, теперь создайте их мозги, то есть файлы классов Java. Давайте назовем их JClass A (для фрагмента A) и JClass B (для фрагмента B)

2. У вас есть кнопка в Frag A, поэтому перейдите в JClass A, и в результате получите текст String, который пользователь наберет, и нажатие кнопки вызывает следующее: // просто переопределить метод onCreate.

 @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.<name of your fragment A.xml file>,container,false); userInput = (EditText)view.findViewById(R.id.<Id that you gave to EditText field in which user enters text>); Button myButton = (Button)view.findViewById(R.id.<id of your Button>); myButton.setOnClickListener( new Button.OnClickListener(){ public void onClick(View v){ JClassB.setText(userInput.getText().toString());/*Replace JClassB with the java class of Fragment B*/ } } ); return view; } 
  1. И, наконец, в вашем JClass B (java-файл для фрагмента B):

    Открытый класс BottomSectionFrag расширяет фрагмент {

     private static TextView userText; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragmentB, container, false); userText = (TextView)view.findViewById(R.id.userText); return view; } public static void setText(String text){ userText .setText(text); } 

    }

Вуаля !!

PS Это мой первый пост в stackOverFlow: D

Мир.

Мне нравится, что деятельность является средним человеком между фрагментом и фрагментацией. Но мне нравится использовать архитектуру шины событий, которая также предлагает развязку.