0

フラグメントの他の要素が更新され、リストビューとグリッドビューは更新されません。アダプターのコンテンツが変更されていることをログで確認できますが、ビューをクリックすると更新されるのは、onResume()です。ListView/GridView内でフラグメントがリフレッシュされない

UIThread、listview.invalidateViews()、gridview.invalidateViews()、およびrequestLayout()、requestFocus()、およびperformClick()がリフレッシュされるので、adapter.notifyDataSetChanged()およびadapter.notifyDataSetInvalidated私が視界領域に触れたとき。

私はまた、フラグメントの取り外し/取り付けを試みました。

再度gridview.setAdapterを実行しようとすると、コンテンツは空白になり、gridview領域をクリックすると更新されます。

私は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です。

編集:現在、最も効果的なのはrequestFocusFromTouch()ですが、不快感を感じます。

答えて

0

私はすべてのケースでonChangeを呼び出すのではなく、期待どおりにUIThreadで動作していないことを確認します。基本的にコードの変更は:

@UiThread 
void onChange() { 
    adapter.clear(); 
    adapter.addAll(elements); 
} 
です
関連する問題