0

Остальные элементы фрагмента обновляются, только 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(), но с глючным ощущением.

ответ

0

Выясните, что я не звонил во всех случаях, а также не работал на UIThread, как ожидалось. Таким образом, в основном изменение кода:

@UiThread 
void onChange() { 
    adapter.clear(); 
    adapter.addAll(elements); 
}