Android Fragment的使用 四 数据恢复和菜单
来源:互联网 发布:linux python环境变量 编辑:程序博客网 时间:2024/06/11 05:34
在没有强制设定屏幕拜访位置时,横竖屏转换时会重新绘画activity,它里面的Fragment也会重新绘制,所以Fragment跟activity一样,有的函数具有在运行配置改变这样的特殊情况下被销毁时能够存储数据的功能,在重新绘制时再回复数据。
使用例子如下:
public class MainActivity extends AppCompatActivity { private FragmentOne mFOne; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState == null){ mFOne = new FragmentOne(); FragmentManager fm = getFragmentManager(); FragmentTransaction tx = fm.beginTransaction(); tx.add(R.id.id_content, mFOne,"ONE"); tx.commit(); } }}
public class FragmentOne extends Fragment { private EditText edit; @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragment_one,container,false); edit = (EditText) view.findViewById(R.id.edit); if(savedInstanceState!=null){ String data = savedInstanceState.getString("MyString"); Log.v("zzw",data); } return view; } @Override public void onSaveInstanceState(Bundle savedInstanceState) { if(edit.getText().toString()!=""&&edit.getText().toString()!=null) savedInstanceState.putString("MyString", edit.getText().toString()); super.onSaveInstanceState(savedInstanceState); Log.v("zzw", "onSaveInstanceState"); }}
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="android.com.myapplication.MainActivity"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/id_content"></FrameLayout></RelativeLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/edit"/></LinearLayout>
Fragment可以使用Menu,而且Fragment的menu和当前的menu可以一同出现,并且彼此不影响对方
使用例子如下:
public class MainActivity extends AppCompatActivity { private FragmentOne mFOne; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if(savedInstanceState == null){ mFOne = new FragmentOne(); FragmentManager fm = getFragmentManager(); FragmentTransaction tx = fm.beginTransaction(); tx.add(R.id.id_content, mFOne,"ONE"); tx.commit(); } } @Override public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item ){ switch (item.getItemId()){ case R.id.setting: Toast.makeText(this,"setting",Toast.LENGTH_SHORT).show(); return true; default: return super.onOptionsItemSelected(item); } }}public class FragmentOne extends Fragment { @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){ View view = inflater.inflate(R.layout.fragment_one, container, false); return view; } @Override public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){ inflater.inflate(R.menu.fragment_menu,menu); } @Override public boolean onOptionsItemSelected(MenuItem item){ switch (item.getItemId()){ case R.id.add_item: Toast.makeText(getActivity(),"add",Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast.makeText(getActivity(),"remove",Toast.LENGTH_SHORT).show(); break; } return true; }}
它的布局文件与上一个例子一样
下面是menu代码
main<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/setting" android:title="setting"/></menu>fragment_one<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add_item" android:title="add"/> <item android:id="@+id/remove_item" android:title="remove"/></menu>
下次讲使用Fragment制作Dialog
再见。
0 0
- Android Fragment的使用 四 数据恢复和菜单
- Android中Fragment数据保存和恢复
- Android中Fragment数据保存和恢复
- Android中Fragment数据保存和恢复
- Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
- Android Fragment的使用 九 Fragment传输数据给Fragment
- Android Fragment的使用 七 Argument和startActivityForResult传递数据
- Fragment的使用(四)
- android 使用InstanceState保存和恢复数据
- android 使用InstanceState保存和恢复数据
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- Android使用Fragment实现底部菜单使用show()和hide()来切换以保持Fragment状态
- Android中保存和恢复Fragment状态的最好方法
- Android中保存和恢复Fragment状态的最好方法
- notes on /etc/rc2.d/rc05loadcpufreq
- HDU1213 How Many Tables
- 链表的有序集合
- 基础知识—表达式与语句-表达式
- 兔子算法
- Android Fragment的使用 四 数据恢复和菜单
- PCL all-in-one VS配置
- Win10下Vivado生成比特流时opt_design跑了很久的解决方法
- 感知器算法及其实现
- TF02 入门
- 图像显示
- ACM刷题之codeforces————Cinema
- 腾讯课堂IMWeb小白-第二天
- NS3和SUMO联合仿真浅析