ps2*_*010 44 android android-fragments
我有一个片段,膨胀xml布局.我的要求是在恢复活动时更新片段内所有视图的文本大小.我试过了
fragment.getView().invalidate();
Run Code Online (Sandbox Code Playgroud)
这似乎没有做的工作.我也试过了
fragment.getView().requestLayout();
Run Code Online (Sandbox Code Playgroud)
这也没用.
在另一个活动中,我有一个ListFragment需要做同样的事情.我试过了
listfragment.getListView().invalidate();
Run Code Online (Sandbox Code Playgroud)
这样做了,刷新我的列表视图并重新绘制其中的所有项目.
我不明白为什么一个有效而另一个无效.
我也看到人们建议启动片段事务并用新的片段替换当前片段,这让我感到疑惑
当我需要的是刷新我的片段包含的视图上的文本时,为什么要创建一个全新的片段并替换当前片段.
片段事务方法将阻止我在我的活动的布局xml中定义我的片段,我将不得不以编程方式将片段插入到正确的位置.
这有什么简单的方法吗?
Jac*_*ień 26
我认为没有办法解决这个问题.该片段在onCreateView()上重建它的UI ...但是在创建或重新创建片段时会发生这种情况.
您必须实现自己的updateUI方法,或者您将指定哪些元素以及它们应如何更新.这是一个很好的做法,因为无论如何你都需要在创建片段时这样做.
但是,如果这还不够,你可以做一些事情,比如用同一个片段替换片段强制它调用 onCreateView()
FragmentTransaction tr = getFragmentManager().beginTransaction();
tr.replace(R.id.your_fragment_container, yourFragmentInstance);
tr.commit()
Run Code Online (Sandbox Code Playgroud)
注意
要刷新ListView,您需要调用notifyDataSetChanged()
ListView的适配器.
小智 23
在我的情况下,detach
并attach
为我工作.
getSupportFragmentManager()
.beginTransaction()
.detach(contentFragment)
.attach(contentFragment)
.commit();
Run Code Online (Sandbox Code Playgroud)
使用以下代码再次刷新片段:
FragmentTransaction ftr = getFragmentManager().beginTransaction();
ftr.detach(EnterYourFragmentName.this).attach(EnterYourFragmentName.this).commit();
Run Code Online (Sandbox Code Playgroud)
小智 5
detach().detach()
在支持库更新25.1.0(可能更早)之后无法正常工作。此解决方案在更新后效果很好:
getSupportFragmentManager()
.beginTransaction()
.detach(oldFragment)
.commitNowAllowingStateLoss();
getSupportFragmentManager()
.beginTransaction()
.attach(oldFragment)
.commitAllowingStateLoss();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
112266 次 |
最近记录: |