В настоящее время я делаю приложение для Android, и я хочу передать дату между деятельности и фрагмент. Моя деятельность есть кнопка, которая открывает фрагмент: DatePickerFragment.
В моей деятельности мне показывают дату, которую я хочу изменить с фрагментом. Поэтому я хочу передать дату в datepicker, и отправить его обратно к активности.
Я'вэ пытался много решений, но ни один не работает. Самый простой способ передать аргумент, но это может'т быть сделано с фрагментов.
Чтобы передать информацию к фрагменту , вы setArguments при его создании, и вы можете загрузить этот аргумент в метод onCreate и onCreateView вашего фрагмента.
На функцию экземпляр ваш фрагмент можно добавить аргументы ты хочешь отправить это:
/**
* Create a new instance of DetailsFragment, initialized to
* show the text at 'index'.
*/
public static DetailsFragment newInstance(int index) {
DetailsFragment f = new DetailsFragment();
// Supply index input as an argument.
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
Затем внутри фрагмента на метод метод
или onCreateView
вы можете получить аргументы вроде этого:
Bundle args = getArguments();
int index = args.getInt("index", 0);
Если вы хотите общаться с вашего фрагмента с вашей деятельностью (отправление данных), вам необходимо использовать интерфейсы. Кстати, вы можете делать это объясняется очень хорошо в документацию о связи между фрагментами. Потому что все фрагменты общаться друг с другом посредством деятельности, в этом уроке вы можете увидеть, как можно отправить данные с подлинной частицей его действия контейнер, чтобы использовать эти данные на мероприятия или отправить его на другой фрагмент, что ваша деятельность содержит.
Учебная документация:
http://developer.android.com/training/basics/fragments/communicating.html
активность
до фрагмент
Деятельность:
Bundle bundle = new Bundle();
String myMessage = "Stackoverflow is cool!";
bundle.putString("message", myMessage );
FragmentClass fragInfo = new FragmentClass();
fragInfo.setArguments(bundle);
transaction.replace(R.id.fragment_single, fragInfo);
transaction.commit();
Отрывок:
Значение в фрагмент
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
String myValue = this.getArguments().getString("message");
...
...
...
}
Но если вы хотите передать значения от фрагмента к деятельности, читаем ответ jpardogo, вы должны интерфейсов, подробнее: общение с другими фрагментами
Использовать библиотеку EventBus для передачи событий, которые могут содержать переменные и обратно. Это'ы это хорошее решение, потому что он продолжает свою деятельность и фрагменты слабосвязанных
спасибо @ρяσѕρєя K и Терри ... он мне очень помогает, и работает отлично
От активности передачи данных с намерением, как:
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
и в методе onCreateView фрагмента:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// get arguments
String strtext = getArguments().getString("edttext");
return inflater.inflate(R.layout.fragment, container, false);
}
Для всех разработчиков Котлин там:
Вот это Android-студия предлагаемое решение *чтобы отправить данные на ваш фрагмент** (= когда вы создаете пустой-фрагмент с файл -> новый> фрагмент -> фрагмент(бланк) а вы проверьте и"включить фрагмент заводских методов и").
Положите это в ваш фрагмент:
class MyFragment: Fragment {
...
companion object {
@JvmStatic
fun newInstance(isMyBoolean: Boolean) = MyFragment().apply {
arguments = Bundle().apply {
putBoolean("REPLACE WITH A STRING CONSTANT", isMyBoolean)
}
}
}
}
.применить
- это хороший трюк для набора данных, когда объект создается, или, как они здесь государство]1:
вызывает указанную функцию [блок] с
этой
значение в качестве своего приемника > и возвращает это значение.
Тогда в вашей деятельности или фрагмент сделать:
val fragment = MyFragment.newInstance(false)
... // transaction stuff happening here
и читать аргументы в свой фрагмент, такой как:
private var isMyBoolean = false
override fun onAttach(context: Context?) {
super.onAttach(context)
arguments?.getBoolean("REPLACE WITH A STRING CONSTANT")?.let {
isMyBoolean = it
}
}
Чтобы "Отправить" и данные вашей активности, просто определите функцию в вашей деятельности и сделать следующее в ваш фрагмент:
(activity as? YourActivityClass)?.callYourFunctionLikeThis(date) // your function will not be called if your Activity is null or is a different Class
Наслаждайтесь магией Котлин!
Отправка данных из активности на фрагменты связаны с XML
Если вы создаете фрагмент в Android Studio, используя один из шаблонов, например, Файл > новое > фрагмент > фрагмент (список), тогда фрагмент связан через XML. Newinstance метод создается в фрагмент, но никогда не называл так может'т быть использованы для передачи аргументов.
Вместо этого в активности переопределить метод onAttachFragment
@Override
public void onAttachFragment(Fragment fragment) {
if (fragment instanceof DetailsFragment) {
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
}
}
Тогда читайте аргументы в метод onCreate фрагмента, как в других ответов