Android Fragment类
DialogFragment 一个Fragment可以在Fragment的父Activity上显示一个浮动的对话框。
而且可以滴定仪对话框的UI直接和通过FragmentAPI 控制可见性。
ListFragment Fragment封装类 可以通过绑定数据源呈现一个ListView作为主要的UI展现方式。里面提供Adapter设置方法,从而使用呈现列表选择的时间处理程序。
WebViewFragment 衣蛾封装类,它在Fragment内封装一个WebView.当Fragment被展厅和回复时,子WebView同意会被暂停和回复
ListFragment 例子
将吧UI跟个为一系列的Fragment来表示个个组件 ---文本输入框和todo时间想的列表
new_item_fragment.xml
<Editex xmlns:android ="http://schemas.android.com/apk/res/android"
android:id="@+id/myEditText"
android:layout_width="match_parent"
android :layout_height="wrap_content"
andoid:hint="@string/addItemHint"
android:contentDescription="@string/addItemContentDescription"
>
为每个UI组件创建一个新的Fragment。首先创建一个继承Fragment的NewItemFragment .
重新OnCreateView处理填充第一步创建布局
public class NewItemFragment extend Fragment{
public View onCreateView (LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.new_item_fragment,container,false)
}
每个Fragment应该封装它所提供的功能,对于NewItemFragment来说 就是接受新的思想并且添加到列表中。
首先定义一个 接口,ToDoListActivity通过实现该接口监听新事件的添加
public interface OnNewItemAddedListener{
public void onNewItemAdded(String newItem);
}
创建一个变量来保存实现这个接口的ToDoListActivity类引用,一旦Fragment绑定到了他的父Activity 就可以在OnAttach处理程序中获得该Activity的引用
private OnNewItemAddedListener onNewItemAddedListener;
public void onAttach(Activity activity){
onNewItemAddedListenner =activity;
}
将editText.onClickListener 实现从ToDoListActivity 移入到Fragment中。当用户添加一个新东西啊不是直接想数组文本添加,而是传递到父Activity的OnNewItemAddedListener.onNewItemAdded中实现
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState ){
View view =inflater.inflater(R,layout.new_item_fragment,container,false);
final EditText myEditText= view.findViewById(R.id.myEditText);
myEditeText.setOnKeyListener(new View.OnKeyListener(){
public boolean onKey(View v,int keyCode,KeyEvent event){
if(event.getAction()==KeyEvent.ACTION_DOWN)
if((keyCode==KeyEvent.KEYCODE_DPAD_CEMTER||keyCode==KeyEvent.KEYCODE_ENTER){
String newIntem =myEditText.getText().toString();
onNewItemAddedLIstener.onNewItemAdded(newItem);
myEditText.setText("");
return true;
}
return false;
}
});
return view;
}
创建包含todoListActivity思想列表的Fragment Android提供ListFragment类,它可以很容易的创建基于Fragment简单的ListView
public class ToDoListFragment extends ListFragment{
}
ListFragment类包含由一个单独的ListView组成的默认UI,对于这个例子来说,这已经足够了,通过创建自定义的布局并在onCreate处理程序中加载这个布局,可以很容易地自定义默认的ListFragmentUI,任何自定义的布局必须包含一个ListView 节点 Id格式为 @android:id/list;
完成了Fragment 返回Activity 首先跟新main.xml布局,将List View和Edit Text分别替换成ToDoListFragment 和NewItemFragment
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<fragment android:name="com.paad.todolist.NewItemFrgment"
android:id="@id/NewItemFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<fragment android:name="com.paad.todolist.ToDoListFragment"
android:id="@id/NewItemFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
</LinearLayout>
回到ToDoListActivity 在OnCreate方法中给ToDoListActivityFragment 创建和分配适配器之前通过Fragment Manager获取ToDoListFragment 的引用 因为ListView 和Edit TextVViews 此时封装再Fragment 中,所以不需要在Activity 中获取他们的引用,需要吧Array Adapter 和ArrayList的作用域扩展到类变量
public void onCreate(Bundle savedInstanceState){
}
//填充你的View
setContentView(R.layout.main);
//获取该Fragment作用
FragmentManager fm=getFragmentManager();
ToDoListFragment todoListFragment =(ToDoListFragment)fm.fomdFragmentById(R.id.TodoListFragment);
//创建to do项的ArrayList
todoItems =new ArrayList<String>();
aa=new ArrayAdapter<Sttring>(this,android.R.laupit.simple_list_item_1,todoItem);
//将ArrayAdapter绑定在listview上
todoListFragment,setKustAdapter(aa);
剩下把NewItemFragment中创建任何一个新项添加进来。首先声明你的类将实现第三部中在NewItemFragment中定义的OnNewITemAddedListener接口
public class ToDoListFragment extends Activity implements NewItemFragment.OnNewItemAddedListstener{
最后时限OnNewItemAdded处理程序实现坚挺。在通知Array Adapter数据集改变之前,被即受到的字符串变量添加到ArrayList中
public void onNewItemAdded(String newItem){
todoItems.add(newItem);
aa.notifyDataSetChanged();
}
}