FragmentTest学习笔记2
2014-03-08 10:44
423 查看
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);
//激发mCallbacks的onItemSelected方法
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);
//激发mCallbacks的onItemSelected方法
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事务。
(1)inflater.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"
/>
相关文章推荐
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- 解決Linux下Android开发真机调试设备不被识别问题
- [Android]在代码里运行另一个程序的方法
- [软件咨询]WPS2012正式版已发布 金山Office移动版4.0发布
- Android笔记-Linux Kernel Ftrace (Function Trace)解析
- android USB如何修改VID具体实现
- Android增量升级的方法和原理详细介绍
- Android Mouse实现过程详细笔记
- 深入Android Browser配置管理的详解
- Android Mms之:深入理解对话列表管理
- Android APP与媒体存储服务的交互
- android 多线程技术应用
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- Android数据类型之间相互转换系统介绍
- 通过Android trace文件分析死锁ANR实例过程
- Android实现左右滑动效果的方法详解
- Android 各国语言缩写及简称详细介绍
- Android 自动判断是电话,网址,EMAIL方法之Linkify的使用