Отправка данных из действия во фрагмент - как? - PullRequest
0 голосов
/ 08 января 2019

дело 1: Я хотел знать, почему данные должны передаваться во фрагмент с использованием метода .setArguments ()?

дело 2: Почему мы не можем использовать простое общедоступное свойство сеттера внутри класса фрагмента?

пример для случая 1 : (вид псевдокода)

Activty {
   FragmentA fa = new FragmentA();
   Bundle bundle = new Bundle();
   bundle.putString("key_1", "Hello");
   fa.setArguments(bundle);

   //begin fragment transistion
}

пример для случая 2:

Activty {
   FragmentA fa = new FragmentA();

   //setter in frgment class
   fa.setPropertyForKey_1("Hello");

   //begin fragment transistion
}

В чем разница между двумя случаями и какой из них вы рекомендуете?

Не думаете ли вы, что создание связки - непростая задача в этом простом сценарии?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Если вы хотите отправить данные во Фрагмент из Активности, лучше всего создать экземпляр фрагмента. Вы можете взять этот код в качестве примера;

Фрагмент;

class SampleFragment: Fragment{

    companion object {

        const val KEY_DATA = "data"
        const val KEY_OTHER_DATA = "other_data"

        fun instance(data:String, otherData:Int): SampleFragment {
            val fragment = SampleFragment()
            val bundle = Bundle()

            bundle.putString(KEY_DATA,data)
            bundle.putInt(KEY_OTHER_DATA,otherData)

            fragment.arguments = bundle

            return fragment
        }
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val data = arguments.getString(KEY_DATA)
        val otherData = arguments.getInt(KEY_OTHER_DATA)
    }
}

активность;

class SampleActivity: AppCompatActivity() {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        val sampleFragment = SampleFragment.instance("data",0)
    }
}

Я надеюсь, что это работает для вас

0 голосов
/ 08 января 2019

Разница между вашими двумя делами:

Случай 1: информация о пакете не теряется после поворота экрана. Когда FragmentA воссоздается, он снова получает данные из пакета, поэтому у вас все еще есть запрошенные данные.

Случай 2: Когда вы поворачиваете экран устройства, Фрагмент уничтожается, а затем воссоздается андроидом. Таким образом, содержимое FragmentA.propertyForKey1 теряется после поворота.

Так что нет, это не накладные расходы, это необходимо. И я думаю, что в целом лучше извлечь максимум из нативных API, прежде чем пытаться изобретать велосипед.

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