Взаимодействие встроенного фрагмента - PullRequest
0 голосов
/ 05 октября 2018

У меня есть фрагмент с 2 встроенными фрагментами.Я хотел бы, чтобы встроенный фрагмент1 взаимодействовал со встроенным фрагментом2.Например, у меня есть кнопка внутри встроенного фрагмента1, когда я нажимаю на упомянутую кнопку, я бы хотел, чтобы она обновила TextView внутри встроенного фрагмента2.

Вот мой основной «родительский» фрагмент

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <fragment
            android:id="@+id/fragment1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:layout="@layout/fragment1"/>

        <fragment
            android:id="@+id/fragment2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:layout="@layout/fragment2"/>
    </LinearLayout>

Вот мой метод фрагмента1 класса onCreateView:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    super.onCreateView(inflater, container, savedInstanceState)
    val mainView = inflater.inflate(R.layout.fragment1, container, false)
    val button = mainView.findViewById<Button>(R.id.button)
    button.setOnClickListener {
         /* Update TextView inside Fragment2 */
    }

    return mainView
}

Вот мой метод фрагмента2 класса onCreateView:

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    super.onCreateView(inflater, container, savedInstanceState)
    val mainView = inflater.inflate(R.layout.fragment2, container, false)
    val textView = mainView.findViewById<TextView>(R.id.textview)

    return mainView
}

1 Ответ

0 голосов
/ 05 октября 2018

Читайте об этом: https://developer.android.com/training/basics/fragments/communicating

Это стандартный способ.В основном создайте интерфейс Fragment1 для реализации Activity;назначьте ссылку на Activity во фрагменте в качестве этого интерфейса;затем найдите другой фрагмент из Activity, чтобы вызвать метод фрагмента для обновления textView.

Редактировать: В случае фрагментов внутри фрагментов вы можете реализовать интерфейс в родительском фрагменте и присоединить его так:

@Override
public void onAttach(Context context) {
  super.onAttach(context);
  try {
        callback = (SomeInterface) getParentFragment();
    } catch (ClassCastException e) {
        throw new ClassCastException("Parent fragment must implement SomeInterface");
    }

}

Однако, как уже упоминалось в статье, это старый способ.Современный способ - это обмен данными между общей ViewModel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...