标签:date 简单 ide stc androi uuid 数据类型 回退 dao
public static CrimeFragment newInstance(UUID crimeId){ Bundle args=new Bundle(); args.putSerializable(ARG_CRIME_ID,crimeId); CrimeFragment fragment=new CrimeFragment(); fragment.setArguments(args); return fragment;
ViewPager:
ViewPager与PagerAdapter间的配合, PagerAdapter的子类FragmentStatePagerAdapter提供了两个方法:
getCount()和getItem(int)
FragmentStatePagerAdapter与FragmentPagerAdapter :
FragmentPagerAdapter是另外一种可用的PagerAdapter 其用法与FragmentStatePagerAdapter方法基本一致 不同在于:
卸载不需要的Fragment时,各自采用的处理方法不同:
FragmentStatePagerAdapter会销毁不需要的Fragment,事务提交之后,fragmentManager中的fragment会被彻底移除
FragmentStatePagerAdaoter类中的state表明:在销毁fragment时,可在onSaveInstanceState(Bundle)方法中保存fragment的Bundle信息
切换回来时,保存的实例状态可用来恢复成新的fragment
FragementPagerAdapter:
在销毁不需要的fragment时, fragment会调用事务的detach(Fragment)方法来处理,而非remove(Fragment)方法,
FragmentPagerAdapter只是销毁了fragment的视图,fragment实例还保留在fragmentManager中
所以FragmentPagerAdapter创建的fragment永远不会被销毁
ViewPager的工作原理:
PagerAdapter要比Adapter,因为要处理更多的视图管理工作,
PagerAdapter不使用可返回的onBindViewHolder(...)方法:
1.public object instantiateItem(ViewGroup container,int position):告诉pager adapter创建指定位置的列表项视图,然后将其添加给ViewGroup视图容器
2.public void destroyItem(ViewGroup container,int position,Object object): 告知pager adapter销毁已建视图
3.piblic abstract boolean isViewFromObject(View view,Object object)
instantiateItem(ViewGroup ,position)方法不是立即创建Fragment,PagerAdapter可自行决定何时创建视图
会调用isViewFromObject(View,Object)方法 Object为返回的对象
public boolean isViewFromObject(View view,Object object){
return ((Fragment)object).getView()==view;
}
对话框
Android 中有三种可以用于对话框的按钮:
positive按钮、 negative按钮、neutral按钮 当用户点击position按钮的时候,接受对话框展现消息,如果同一个对话框上放置有多个按钮,按钮的类型
与命名决定着它们在对话框上显示的位置
要将DialogFragment添加到FragmentManager管理并放置到屏幕上,可调用fragment实例:
public void show(FragmentManager manager,String tag)
public void show(FragmentTransaction transaction,String tag)
当创建的Fragment被销毁和重建后,操作系统也会关联它们,调用一下Fragment方法可创建这种关联:
public void setTargetFragment(Fragment fragment,int requestCode):
该方法有两个参数:目标fragment以及类似于传入startActivityForResult(...)方法的请求代码。需要时,目标fragment使用请求代码确认是哪个fragment在回收数据
Activity.OnActivityResult(..)方法是ActivityManager在子activity销毁后调用的父activity方法,处理activity间的数据返回时,会自动调用Activity
.OnActivityResult(...)方法
1.编写需要用户大量输入、以及要求更多空间显示输入的应用,并且要让应用同事支持手机和平板设备时,使用OnActivityResult(...)方法返回数据给目标
fragment是比较方便的
2.手机屏幕空间有限,因此通常需要使用activity托管全屏的fragment界面,来显示用户输入要求,该子activity会由父activity的fragment以调用startActivityForResult(..)方法的
方式启动。子activity被销毁后,父activity会接受到onActivityResult(...)方法的调用请求,并将之转发给启动子activity的fragment
使用AppCompat库
完全整合AppCompat库:
1.添加AppCompat依赖项
2.使用一种AppCompat主题
3.确保所有的activity都是AppCompatActivity子类
4.让activity类继承AppCompatActivity类
主题设置:1.Theme.AppCompat:黑色主题 2.Theme.AppCompat.Light:浅色主题 3.Theme.AppComPat.DarkActionBar: 带黑色工具栏的浅色主题
Fragment.onCreateOptionMenu(Menu,MenuInflater)方法是由FragmentManager负责调用的。当activity接收操作系统的onCreateOptionMenu(..)方法回调请求时,我们需要告知fragment
其管理的fragment应接收onCreateOptionsMenu(...)方法的调用指令,需调用以下方法:
public void setHasOptionsMenu(boolean hasMenu)
点点击菜单中的菜单项时,fragment会接收到onOptionsItemSelected(MenuItem)方法的回调请求。传入该方法的参数是一个描述用户选择的MenuItem实例
public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.menu_item_new_crime: Crime crime=new Crime(); CrimeLab.get(getActivity()).addCrime(crime); Intent intent=CrimePagerActivity.newIntent(getActivity(),crime.getmId()); startActivity(intent); return true; case R.id.menu_item_show_subtitle: mSubtitleVisible=!mSubtitleVisible; getActivity().invalidateOptionsMenu(); updateSubtitle(); return true; //如果菜单项ID不存在,超类版本方法会被调用 default: return super.onOptionsItemSelected(item); } }
菜单通常包含多个菜单项,通过检查菜单项ID,可确定被选定的是哪个菜单项,然后做出相应的响应,此ID通常是菜单定义文件中赋予菜单项资源的资源ID
MenuItem subtitleItem=menu.findItem(R.id.menu_item_show_subtitle); if (mSubtitleVisible){ subtitleItem.setTitle(R.string.hide_subtitle); }else { subtitleItem.setTitle(R.string.show_subtitle); }
Android中遇见层级导航带来的问题:导航回退到的目标activity会被完全重建,既然父activity是全新activity,实例变量值以及保存的实例状态显示会
彻底丢失
在向上导航时保证子标题的可见状态有两种办法:
if (savedInstanceState!=null){ mSubtitleVisible=savedInstanceState.getBoolean(SAVED_SUBTITLE_VISIBLE); }
public void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); outState.putBoolean(SAVED_SUBTITLE_VISIBLE,mSubtitleVisible); }
1.覆盖向上导航的机制:在CrimePagerActivity的finish方法直接退到一个activity界面,但这只能退回一个层级。但实际开发的时候应用里需要多层级导航
2.启动CrimePagerActivity时,把子标题的状态作为extra信息传给它,在CrimePagerActivity中覆盖getParentActivityIntent()方法,用附加extra
信息的intent重建CrimeListActivity
标签:date 简单 ide stc androi uuid 数据类型 回退 dao
原文地址:http://www.cnblogs.com/lsy-lancen/p/6114252.html