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