Rúb*_*ias 13 android android-fragments
我正在使用一个名为SwipeRefreshLayout的小部件,当有人推动视图时刷新我的片段.
要重新创建我必须使用的活动:
SwipeRefreshLayout mSwipeRefreshLayout;
public static LobbyFragment newInstance() {
return new LobbyFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_lobby, container, false);
receiver = new MySQLReceiver();
rlLoading = (RelativeLayout) view.findViewById(R.id.rlLoading);
gvLobby = (GridView) view.findViewById(R.id.gvLobby);
updateList();
mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.mSwipeRefreshLayout);
mSwipeRefreshLayout.setColorSchemeResources(R.color.pDarkGreen, R.color.pDarskSlowGreen, R.color.pLightGreen, R.color.pFullLightGreen);
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
getActivity().recreate();
}
});
return view;
}
Run Code Online (Sandbox Code Playgroud)
但我不想重新创建包含视图寻呼机的完整活动,我想重新创建片段.我怎样才能做到这一点?
Col*_*ire 12
您可以使用 :
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, LobbyFragment.newInstance()).commit();
Run Code Online (Sandbox Code Playgroud)
要重新创建片段
注意:getSupportFragmentManager()如果您使用支持片段和AppCompatActivity,如果您使用的是框架片段类,则需要使用getFragmentManager()
G. *_*ini 10
我正在使用 .detach() 和 .attach() 用于重新创建片段。
连接
在先前使用detach(Fragment)从UI上释放了一个片段之后,重新附加它。这将导致其视图层次结构被重新创建,附加到UI并显示。
分离
从UI分离给定的片段。这与将其放回堆栈时的状态相同:片段已从UI中删除,但是其状态仍由片段管理器主动管理。进入此状态时,其视图层次结构被破坏。
我如何使用
getFragmentManager()
.beginTransaction()
.detach(LobbyFragment.this)
.attach(LobbyFragment.this)
.commit();
Run Code Online (Sandbox Code Playgroud)
如果您使用的是导航组件,则可以使用以下命令:
findNavController().navigate(
R.id.current_dest,
arguments,
NavOptions.Builder()
.setPopUpTo(R.id.current_dest, true)
.build()
)
Run Code Online (Sandbox Code Playgroud)
这让 NavController 弹出当前片段,然后导航到它自己。你会得到一个新的 Fragment 并且 Fragment ViewModel 也被重新创建。
对于 Kotlin 爱好者
如果你想重新创建片段,你应该 dettach() 片段然后 Attach() 片段
请按照此步骤操作
setp : 1,首先在您的 Activity 类上创建一个方法 recreateFragment()
fun recreateFragment(fragment : Fragment){
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
supportFragmentManager.beginTransaction().detach(fragment).commitNow()
supportFragmentManager.beginTransaction().attach(fragment).commitNow()
}else{
supportFragmentManager.beginTransaction().detach(fragment).attach(fragment).commitNow()
}
}
Run Code Online (Sandbox Code Playgroud)
步骤:2,然后在您的片段上调用此方法以重新创建此片段
假设点击一个按钮然后重新创建这个片段
button.setOnClickListener {
(activity as yourActivity).recreateFragment(this)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15210 次 |
| 最近记录: |