Остальные элементы фрагмента обновляются, только listview и gridview, которые этого не делают. Я вижу в журналах, что содержимое адаптера меняется, но просмотры обновляются только тогда, когда я нажимаю на них или onResume().ListView/GridView не обновляется внутри Фрагмент
Я уже пробовал adapter.notifyDataSetChanged() и adapter.notifyDataSetInvalidated() в UIThread, listview.invalidateViews() и gridview.invalidateViews(), а также requestLayout(), requestFocus() и performClick(), так как они обновить когда я касаюсь области просмотра.
Я также попытался отсоединить/прикрепить фрагмент.
Когда я снова пытаюсь gridview.setAdapter, содержимое становится пустым и отображается обновленным, когда я нажимаю на область сетки.
Я использую AndroidAnnotations.
@EActivity(R.layout.activity)
public class MyActivity extends AppCompatActivity {
@FragmentById
Fragment1 fragment1;
@FragmentById
Fragment2 fragment2;
void whenSomethingHappens() {
fragment1.onChange();
fragment2.onChange();
}
}
@EFragment(R.layout.fragment1)
public class Fragment1 extends Fragment {
@ViewById
GridView gridView;
@Bean
MyAdapter1 adapter1;
@AfterViews
void init() {
gridView.setAdapter(adapter1);
}
void onChange() {
adapter1.clear();
adapter1.addAll(elements); // The elements are changed, but not the gridview
}
}
@EFragment(R.layout.fragment2)
public class Fragment2 extends Fragment {
@ViewById
ListView listView;
@Bean
MyAdapter2 adapter2;
@AfterViews
void init() {
listView.setAdapter(adapter2);
}
void onChange() {
adapter2.clear();
adapter2.addAll(elements); // The elements are changed, but not the listView
}
}
@EBean
public class Adapter1 extends ArrayAdapter<Model1> {
@RootContext
Context context;
public Adapter1(Context context) {
super(context, R.layout.model1_item);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Model1Item model1Item;
if (convertView == null) {
model1Item = Model1Item_.build(context);
} else {
model1Item = (Model1Item) convertView;
}
Model1 model1 = getItem(position);
model1Item.bind(model1);
return model1Item;
}
}
Adapter2 - это то же, что и Adapter1, но с различными моделями и элементами. Элементы @ViewGroups просто привязывают модель к элементам представления.
EDIT: Прямо сейчас, что лучше всего работает requestFocusFromTouch(), но с глючным ощущением.