Передача данных из фрагмента в другой - PullRequest
0 голосов
/ 07 июня 2018

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

1 Ответ

0 голосов
/ 07 июня 2018

Используйте интерфейс для связи между двумя фрагментами.фрагмент_2 будет реализовывать интерфейс, а фрагмент_1 будет вызывать этот метод интерфейса при изменении ввода.

FragmentOne

class FragmentOne : Fragment() {
    var listener: DataPassCallback? = null

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
        return inflater.inflate(R.layout.fragment_one, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        et_input.addTextChangedListener(object : TextWatcher {
            override fun afterTextChanged(s: Editable?) {

            }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

        }

            override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
                listener?.dataChaged(s.toString())
            }
        })
    }
}

FragmentTwo

class FragmentTwo : Fragment(), DataPassCallback {

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.fragment_two, container, false)
   }

    override fun dataChaged(data: String) {
       td_output.text = data
   }
}

Интерфейс для передачи данных

interface DataPassCallback {
    fun dataChaged(data: String)
}

Операция добавления этих фрагментов (это простопример)

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val fragOne = FragmentOne()
        supportFragmentManager.beginTransaction().add(R.id.layout_fragment_one, fragOne).commit()

        val fragTwo = FragmentTwo()
        supportFragmentManager.beginTransaction().add(R.id.layout_fragment_two, fragTwo).commit()

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