FragmentTest学习笔记2


1.Activity Fragment之间的数据传输


(1)      Activity向Fragment传递数据

API注释:

Fragment

public void setArguments(Bundle args)

Supplythe construction arguments for this fragment. Thiscan only be called before the fragment has been attached to its activity; thatis, you should call it immediately after constructing the fragment. Thearguments supplied here will be retained across fragment destroy and creation.

public final Bundle getArguments () 

Returnthe arguments supplied-- when the fragment wasinstantiated, if any.

(2)      Fragment向Activity传递数据:

例子:将列表选中的id 传给Activity

【Fragment所在的类】

public classBookListFragment extends ListFragment {

         //定义一个回调接口 该Fragment对象所在Activity需要实现该接口

         publicinterface Callbacks{

                   publicvoid onItemSelected(Integer id);

         }

 

  @Override

    //当用户单击某列表项时回调该方法(让该回调方法依附于Fragment的一个事件操作的响应函数)

    public void onListItemClick(ListView l, View v, int position,long id){

       super.onListItemClick(l, v, position, id);

       //激发mCallbacksonItemSelected方法

       mCallbacks.onItemSelected(BookContent.ITEMS.get(position).id);

    }

}

【Activity所在的类】

public class SelectBookActivity extends Activityimplements BookListFragment.Callbacks{

    @Override

    public void onCreate(Bundle savedInstanceState){}

    //implement the method from interface BookListFragment.Callbacks

    public voidonItemSelected(Integer id){}

}

 

2.两个Fragment的创建

《1》BookDetailFragmet


【Activity向Fragment传输数据】:

 




《2》BookListFragment

//extends ListFragMent

public class BookListFragment extends ListFragment {

@Override

    public void onCreate(Bundle savedInstanceState){

       super.onCreate(savedInstanceState);

       //为该ListFragment设置Adapter

       ArrayAdapter<BookContent.Book> adapter = newArrayAdapter<BookContent.Book>(

              getActivity(),android.R.layout.simple_list_item_activated_1,

              android.R.id.text1,BookContent.ITEMS);

       setListAdapter(adapter);

    }

}

 

3.执行路线:


(1)
<activity

   android:name="com.example.bookdetailfragment.SelectBookActivity"

           android:label="@string/app_name">

            <intent-filter>

                <actionandroid:name="android.intent.action.MAIN"/>

                <categoryandroid:name="android.intent.category.LAUNCHER"/>

            </intent-filter>

       </activity>

(2)class SelectBookActivity{

setContentView(R.layout.activity_book_twopane);

}

(3)R.layout.activity_book_twopane.xml

<fragment

        android:name="com.example.bookdetailfragment.BookListFragment"

(4)classBookListFragment{

//当用户单击某列表项时回调该方法

    public void onListItemClick(ListView l, View v, int position,long id){

       super.onListItemClick(l, v, position, id);

       //激发mCallbacksonItemSelected方法

       mCallbacks.onItemSelected(BookContent.ITEMS.get(position).id);

    }

}

(5) public classSelectBookActivity{

Bundle arguments = new Bundle();

arguments.putInt(BookDetailFragment.ITEM_ID, id);

BookDetailFragmentbookdetailfragment = new BookDetailFragment();

bookdetailfragment.setArguments(arguments);//<---Fragment传入参数

}

6

public class BookDetailFragment{

  public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        if(getArguments().containsKey(ITEM_ID)){

                  //--如果启动该Fragment时包含了ITEM_ID参数

book = BookContent.ITEM_MAP.get(getArguments().getInt(ITEM_ID));   

        }

    }

    @Override

    public View   onCreateView(LayoutInflaterinflater, ViewGroup container,

        BundlesavedInstanceState){

    //加载布局文件

    ViewrootView = inflater.inflate(R.layout.activity_book_detail_fragment,

            container,false);

    if(book!=null){

((TextView)rootView.findViewById(R.id.book_title)).setText(book.title

((TextView)rootView.findViewById(R.id.book_title)).setText(book.desc)

    return rootView;

}

}


4.其他问题:

(0)Fragment管理与Fragment事务 

FragmentManager负责Fragment管理,FragmentTransaction负责Fragment事务。





1inflater.inflate()函数的分析

public abstract class LayoutInflater

public View inflate (XmlPullParser parser, ViewGroup root,boolean attachToRoot)

Inflate a new view hierarchyfrom the specified XML node.

Parameters

parser XML domnode containing the description of the view hierarchy.

root   Optionalview to be the parent of the generated hierarchy (ifattachToRoot is true), or else simply an object that provides a set ofLayoutParams values for root of the returned hierarchy (if attachToRoot is false.)

 

 

@Override

    public View    onCreateView(LayoutInflaterinflater, ViewGroupcontainer, Bundle savedInstanceState){

    //加载布局文件

    ViewrootView = inflater.inflate(R.layout.activity_book_detail_fragment,

            container,false);

    if(book!=null){

       

((TextView)rootView.findViewById(R.id.book_title)).setText(book.title);

((TextView)rootView.findViewById(R.id.book_desc)).setText(book.desc);

  }

    return rootView;

}

详细分析可以参考:

http://blog.csdn.net/zuolongsnail/article/details/6370035


(2)ArrayAdapter

ArrayAdapter<BookContent.Book>adapter =new ArrayAdapter<BookContent.Book>(getActivity(),android.R.layout.simple_list_item_activated_1,android.R.id.text1,BookContent.ITEMS);//左边的Fragment 此处只显示文字

API原型:

public ArrayAdapter (Context context, intresource, int textViewResourceId, List<T> objects)

Constructor

 

Parameters

context    Thecurrent context.

resource  Theresource ID for a layout file containing a layout to use when instantiatingviews.

textViewResourceId        The id of the TextView within the layout resource to bepopulated

objects     Theobjects to represent in the ListView.

 

getActivity()


simple_list_item_activated_1:

(from R.layout extendsObject

http://developer.android.com/reference/android/R.layout.html

单字符串单行显示,simple_list_item_1,

双字符串双行显示,simple_list_item_2

simple_list_item_activated_1         :

A version of simple_list_item_1 that isable to change its background state to indicatewhen it is activated (that is checked by a ListView).

android.R.id.text1

参见源码:

<TextViewxmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@android:id/text1"   <-----------HERE

   android:layout_width="fill_parent"

   android:layout_height="?android:attr/listPreferredItemHeight"

   android:textAppearance="?android:attr/textAppearanceLarge"

    android:gravity="center_vertical"

    android:paddingLeft="5dip"

    android:singleLine="true"

/>



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值