Переместить данные из фрагмента в задание сзади - PullRequest
0 голосов
/ 06 января 2020

У меня есть ViewPager в моей деятельности. Мне нужно вернуть результат из фрагментов ViewPager в активность. В то же время возвращенные данные будут добавлены в список в деятельности. Поэтому я думаю, что пример деятельности не должен исчезнуть. Я не знаю, делаю ли я это с Бандлом. Было бы хорошим решением переместить синглтон с объектом? Что лучше для этого, друзья?

Большое спасибо за ваш ответ. Я предполагаю, что я, возможно, не написал мой вопрос ясно. Фактически, ViewPager в CameraActivity имеет CameraFragment и GalleryFragment. Это означает, что несколько действий могут вызывать CameraActivity. CameraFragment или GalleryFragment должны иметь возможность возвращать захваченную или выбранную фотографию в Activity / Fragmet, которая вызывает CameraActivity типа «Файл».

Ответы [ 2 ]

1 голос
/ 06 января 2020

добавить интерфейс к вашему фрагменту и передать ваши данные вместе с ним.

class FragmentCategory : Fragment() {
 private lateinit var delegate: Interaction

 interface Interaction {
        fun onSelect(testParam:String)
        fun onShowLoading()
        fun onHideLoading()
    }

 companion object {
        fun newInstance(delegate: Interaction): FragmentCategory {
            val frag = FragmentCategory()
            val args = Bundle()
            frag.arguments = args
            frag.delegate = delegate
            return frag
        }

    }


    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view: View = inflater.inflate(
            R.layout.fragment_category_main,
            container, false
        )

         //for example you can use delegate.onSelect("test") for pass data to your activity 
         return view
    }
}

с использованием этого фрагмента:

val frgCategory= FragmentCategory.newInstance(object : FragmentCategory.Interaction {
            override fun onSelect(testParam:String) {

            }

            override fun onShowLoading() {

            }

            override fun onHideLoading() {

            }

        })
0 голосов
/ 06 января 2020

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

Определить интерфейс, который будет использоваться для связи между фрагментами ViewPager и действием

public interface CommunicationInterface {
    public void onDataReady(long value);
}

Пусть ваша деятельность реализует такой интерфейс.

public class MainActivity extends AppCompatActivity implements CommunicationInterface {
    @Override
    public void onDataReady(long value) {
        // data received from the fragments.
        // here you can put the value into the list and display it
    }
}

На фрагментах не забудьте получить ссылку на родительскую активность, передав ее в обратном вызове onActivityCreated:

public class FragmentTest extends Fragment {

    private CommunicationInterface parentActivity;

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        parentActivity = (CommunicationInterface) getActivity();
    }
}

Теперь, когда вы Чтобы вернуться к действию, просто используйте

parentActivity.onDataReady(3L);

, чтобы убедиться, что parentActivity не вызывается после onActivityCreated обратного вызова (просто проверьте, что не ноль).

Надеюсь, что это помогает.

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