Fragment五

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();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值