UPDATE. Я нашел, что заголовок - это не единственное, что затронуто, но listeners
и другие элементы в фрагменте не инициализируются. (Например, FAB). Единственное, что работает правильно, - это что-то построенное внутри adapter
(т.е. Строки ListView
)
Проблема. Откройте "Открытый ящик", щелкните элемент списка, который открывает новый Fragment
в том же Activity
. Откройте снова "Ящик навигации", щелкните тот же элемент, который должен просто заменить существующий Fragment
, а при открытии Fragment
все элементы, которые программно программируются в Java (текст, цвета, слушатели), не изменяются/не добавляются к Fragment
. Представление - это просто макет по умолчанию xml
. Я подтвердил с помощью Log.d
, что код, который устанавливает эти вещи, запускается. (Если вы открываете другой Fragment
, а затем возвращаетесь к исходному, все работает нормально)
Подтвержденная причина: При изменении этого параметра:
compile "com.android.support:appcompat-v7:25.0.1"
compile 'com.android.support:design:25.0.1'
к
compile "com.android.support:appcompat-v7:25.1.0"
compile 'com.android.support:design:25.1.0'
(если только одна из этих библиотек изменена, неважно, какая из них проблема)
Я подтвердил, что изменение этих двух библиотек является проблемой (также подтвердило эту проблему во втором приложении и изменило только этот код, имеет тот же результат)
Мои вопросы, почему это происходит и как это можно исправить?
Код и более подробное описание из оригинального вопроса:
FragmentTransaction tItems = fm.beginTransaction();
ListFragment mFrag = new PlannerFragment();
tItems.replace(R.id.main_frag, mFrag, TAG_CALC_FRAGMENT);
tItems.commit();
В моем ящике имеется около 4 параметров, которые открывают этот фрагмент, но перед каждым я устанавливаю глобальную переменную следующим образом:
MyApp.PlanType = "highbal";
MyApp.PlanType = "lowbal";
etc.
На основе значения PlanType
(выше), что Fragment
загружается с различными данными (но в тех же самых макетах xml). Это просто ListView
с заголовком.
Этот Fragment
, (PlannerFragment
) загружается в первый раз.
Когда я нажимаю на другой элемент (другой PlanType
), который переходит к тому же Fragment
(тот же самый код выше выполнен): ListView
загружает штраф в фактический список. Но в header
в списке, ни один из значений setText()
не устанавливает новые данные правильно. Он использует значения по умолчанию из моего макета xml
.
Теперь, если я загружаю другой Fragment
между ними, все отлично работает. Это только когда я либо добавляю, либо заменяю (я пробовал оба) тот же самый Fragment
поверх старого делает это.
Вот код заголовка вверху PlannerFragment
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// Setup listview
lv = getListView();
LayoutInflater inflaterHeader = getActivity().getLayoutInflater();
ViewGroup header = (ViewGroup) inflaterHeader.inflate(R.layout.planner_listview_header, lv, false);
lv.addHeaderView(header, null, false);
// Load Data then Set Textviews, e.g.:
TextView title = (TextView) getActivity().findViewById(R.id.tvPlannerTitle);
dateOutput = (TextView) getActivity().findViewById(R.id.tvDebtOutDate);
Если я добавлю к этому коду, dateOutput.setText("test");
этого не произойдет. Я могу сделать Log.d
и мои регистры данных, поэтому этот код читается, но пользовательский интерфейс не установлен.
Я даже попытался удалить Fragment
сначала, как это, с помощью проверки:
Fragment fragment = fm.findFragmentByTag(TAG_CALC_FRAGMENT);
if(fragment != null)
fm.beginTransaction().remove(fragment).commit();
Это не влияет.
Опять же, это ТОЛЬКО случалось, когда я менял библиотеки выше. Это ошибка с библиотекой или она теперь реагирует по-другому?