什么是之间的差异onCreate(),onCreateView()以及onActivityCreated()将它们各自用于片段和什么?
android oncreate android-lifecycle android-fragments fragment-lifecycle
在我的应用程序中我有TextView和EditText.两者都有数据.当屏幕方向更改EditText剩余数据时,TextView数据将被清除.
有人可以帮助我找到保留数据的方法TextView吗?
android onconfigurationchanged android-layout android-orientation
我发现Fragment #setRetainInstance(true)令人困惑.这是从Android Developer API中提取的Javadoc :
public void setRetainInstance(boolean retain)
控制是否在活动重新创建(例如从配置更改)中保留片段实例.这只能用于不在后栈中的片段.如果设置,则在重新创建活动时,片段生命周期会略有不同:
- onDestroy()不会被调用(但是onDetach()仍然会被调用,因为片段正在与其当前活动分离.
- 因为片段没有被重新创建,所以不会调用onCreate(Bundle).
- onAttach(活动)和onActivityCreated(捆绑)将仍然被调用.
问题:作为开发人员,您如何使用它,为什么它会使事情变得更容易?
我正在尝试使用setRetainInstance()但它似乎不适合我!=(.我将问题简化为最简单的版本:
我有一个带有TextView和Button的片段.
当按下按钮时,TextView的初始文本是"我正在等待",文本变为"Hello!"
那是我的代码:
片段:
public class SayHelloFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.say_hello_layout, container);
final TextView text = (TextView) view.findViewById(R.id.textView1);
view.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
text.setText("Hello!");
}
});
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setRetainInstance(true);
}
}
Run Code Online (Sandbox Code Playgroud)
活动:
public class MainActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Run Code Online (Sandbox Code Playgroud)
活动的布局:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android" …Run Code Online (Sandbox Code Playgroud)