Я создаю приложение, которое имеет MainActivity extends FragmentActivity
, который использует CalendarFragment extends Fragment
, который заполнен любым числом ShiftRowFragment extends Fragment
.Способ динамического добавления фрагмента в другой фрагмент
Я хочу построить метод для динамического добавления ShiftRowFragment
в CalendarFragment
. ShiftRowFragment
содержит динамические значения, такие как дата и время, как String
.
Вот мой CalendarFragment.java
:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class CalendarFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
addDay();
addDay();
View v = inflater.inflate(R.layout.calendar_fragment, container, false);
return v;
}
private void addDay() {
ShiftRowFragment shiftFragment = new ShiftRowFragment();
FragmentTransaction transaction = getChildFragmentManager()
.beginTransaction();
transaction.add(R.id.llShifts, shiftFragment).commit();
}
}
Вот что ShiftRowFragment.java
выглядит следующим образом:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ShiftRowFragment extends Fragment {
public static ShiftRowFragment newInstance(int index) {
ShiftRowFragment f = new ShiftRowFragment();
Bundle args = new Bundle();
args.putInt("index", index);
f.setArguments(args);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.shiftrow_fragment, container,
false);
// load calendar
return view;
}
}
Честно говоря, я запутался о документации, которую я читал. Что-то должно произойти в методе newInstance
ShiftRowFragment
, но я не уверен, что именно. В текущем коде отображаются два значения ShiftRow со значениями по умолчанию (указанными в файле shiftrow_fragment.xml).
И наконец, файл shiftrow_fragment.xml
содержит следующие TextViews
, которые должны быть динамически заполнены.
tvDateIconMonth
- Вмещает строковое значение, например, "января", "февраль" и т.д.tvDateIconDay
- Имеет значение строки, например, "Mon.", "вт", и т.д.tvExpiration
- Имеет значение строки, например, «Сегодня», «Завтра», «в 3-х дней» и т.д.Кроме того, мне нужно установить метку на родителе
LinearLayout
, который содержит вышеTextViews
к индексу, чтобы я мог получить доступ к детямFragment
.
Как исправить мой метод addDay()
, чтобы сделать то, что мне нужно?
Никогда не передавайте даты. Они не являются потокобезопасными. Вы можете легко передать длинную временную метку и создать объект даты в фрагменте. Если вы хотите передавать даты, используйте объекты Joda DateTime, они намного лучше, чем объекты Date. – Ge3ng