XSuperMES移动端运用FragmentActivity适配大屏幕(二)
2015-11-30 09:04
316 查看
今天继续完成剩下的学习部分,现在项目很多地方使用viewpager来提供滑动,今天记录学习viewpager配合fragment的显示,增加一个CallLogsFragment配合之前SMSListFragment
1.CallLogsFragment,主要显示手机的电话记录,这都是之前的代码,所以只要把Activity转换成Fragment就可以了,也一样,
Activity.setContentView(int) 转变成Fragment.onCreateView(View)并且 findViewById也在里面了
Activity.onCreate() 代码 转成 Fragment.onActivityCreated()中
Activity.onResume() 代码 转成 Fragment.onResume() 中
代码如下:
public class CallLogsFragment extendsFragment{
private ListView vList;
private CallPanelView vDial;
private TextView vShowDial;
private CallListAdapter mAdapter;
private Animation mDialHidAnim;
private Animation mDialShowAnim;
@Override
public View onCreateView(LayoutInflaterinflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View root =inflater.inflate(R.layout.activity_calls_list_screen, null);
vList = (ListView)root.findViewById(R.id.activity_call_list_lv);
vShowDial = (TextView)root.findViewById(R.id.activity_call_show_dial);
vDial = (CallPanelView)root.findViewById(R.id.dial_panel_view);
return root;
}
@Override
public void onActivityCreated(BundlesavedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
prepareResourceAndData();
bindView();
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
mAdapter.setCallNumbers(CallCache.getInstance().getCallNumbers());
}
private void prepareResourceAndData(){
mAdapter = newCallListAdapter(getActivity());
mDialHidAnim =AnimationUtils.loadAnimation(getActivity().getApplicationContext(),
R.anim.dial_panel_hidden);
mDialHidAnim.setAnimationListener(newAnimationListener() {
public void onAnimationStart(Animationanimation) {}
public void onAnimationRepeat(Animationanimation) {}
public void onAnimationEnd(Animationanimation) {
// End
vShowDial.setVisibility(View.VISIBLE);
vDial.setVisibility(View.GONE);
}
});
mDialShowAnim =AnimationUtils.loadAnimation(getActivity().getApplicationContext(),
R.anim.dial_panel_show);
mDialShowAnim.setAnimationListener(newAnimationListener() {
public void onAnimationStart(Animationanimation) {}
public void onAnimationRepeat(Animationanimation) {}
public void onAnimationEnd(Animationanimation) {
// End
vShowDial.setVisibility(View.GONE);
}
});
}
private void bindView() {
vList.setAdapter(mAdapter);
vList.setOnItemClickListener(newOnItemClickListener() {
@Override
public voidonItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
CallItemView itemview = (CallItemView)view;
itemview.toggleExpand();
hidDialPanel(true);
}
});
vList.setOnScrollListener(newOnScrollListener() {
public void onScroll(AbsListView view, intfirstVisibleItem, int visibleItemCount, int totalItemCount) {}
@Override
public voidonScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (scrollState ==OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
hidDialPanel(false);
}
}
});
vDial.setPanelAnim(mDialShowAnim,mDialHidAnim);
vShowDial.setVisibility(View.GONE);
vShowDial.setOnClickListener(newOnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vDial.show();
}
});
}
private void hidDialPanel(boolean anim){
if (vDial.getVisibility() == View.VISIBLE){
if(anim){
vDial.dismiss();
}else{
vDial.setVisibility(View.GONE);
vShowDial.setVisibility(View.VISIBLE);
}
}
}
}
}
布局修改成,增加ViewPager,去掉原有的容器framelayout:
<?xmlversion="1.0" encoding="utf-8"?>
<
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/door_root_content_fl"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/door_viewpager_content_vp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="55dp"
android:orientation="horizontal">
<Button
android:id="@+id/door_menu_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="菜单"/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
V4 support
包里面已经帮我们写好了FragmentPagerAdapter,看源码可以知道在PageAdapter.instantiateItem中,有:
Fragmentfragment = mFragmentManager.findFragmentByTag(name);
if (fragment != null) {
if (DEBUG) Log.v(TAG,"Attaching item #" + itemId + ": f=" + fragment);
mCurTransaction.attach(fragment);
} else {
fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Addingitem #" + itemId + ": f=" + fragment);
mCurTransaction.add(container.getId(), fragment,
makeFragmentName(container.getId(), itemId));
}
可以看出
ViewPager在添加fragment 的时候先在FragmentManager里面找有没有,如果没有就会去请求PageAdapter.getItem(position)来生成fragment,进行添加,因此我们只要重写FragmentPagerAdapter并实现getItem方法就可以了,代码如下:
classFragmentAdapter extends FragmentPagerAdapter{
publicFragmentAdapter(FragmentManager fm) {
super(fm);
// TODOAuto-generated constructor stub
}
@Override
public FragmentgetItem(int position) {
// TODOAuto-generated method stub
returngetPagerFragmentByPosition(position);
}
@Override
public intgetCount() {
// TODOAuto-generated method stub
return 2;
}
}privateFragment getPagerFragmentByPosition(int position){
if(position ==FRAG_INDEX_CALL_LOG){
return newCallLogsFragment();
}
if(position == FRAG_INDEX_SMS){
return newSMSListFragment();
}
returnnull;
}
页面完整代码:
public classDoorFragmentActivity extends FragmentActivity{
public staticfinal String FRAG_SMS = "sms_list_frag";
public staticfinal String FRAG_TEXT = "text_frag";
public staticfinal int FRAG_INDEX_CALL_LOG = 0;
public staticfinal int FRAG_INDEX_SMS = 1;
private FragmentmTextFragment;
privateFragmentManager mFragMgr;
privateViewPager vViewPager;
private ButtonmMenuBtn;
@Override
protected voidonCreate(Bundle savedInstanceState) {
// TODOAuto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.door_fragment_activity_layout);
initFragments();
bindViews();
}
private voidbindViews(){
mMenuBtn =(Button) findViewById(R.id.door_menu_btn);
mMenuBtn.setOnClickListener(newOnClickListener() {
@Override
public voidonClick(View v) {
// TODOAuto-generated method stub
showOutFragments(FRAG_TEXT,true);
}
});
vViewPager =(ViewPager) findViewById(R.id.door_viewpager_content_vp);
vViewPager.setAdapter(newFragmentAdapter(mFragMgr));
}
private voidinitFragments(){
mFragMgr = getSupportFragmentManager();
TextFragmenttextfrag = new TextFragment();
textfrag.setMessage("这是
菜单界面");
mTextFragment =textfrag;
}
private voidshowOutFragments(String tag, boolean needback){
FragmentTransactiontrans = mFragMgr.beginTransaction();
trans.setCustomAnimations(R.anim.frag_enter,
R.anim.frag_exit);
trans.add(R.id.door_root_content_fl,getFragmentByTag(tag), tag);
if(needback){
trans.addToBackStack(tag);
}
trans.commit();
}
private FragmentgetFragmentByTag(String tag){
if(FRAG_TEXT.equals(tag)){
returnmTextFragment;
}
returnnull;
}
private FragmentgetPagerFragmentByPosition(int position){
if(position ==FRAG_INDEX_CALL_LOG){
return newCallLogsFragment();
}
if(position ==FRAG_INDEX_SMS){
return newSMSListFragment();
}
returnnull;
}
classFragmentAdapter extends FragmentPagerAdapter{
publicFragmentAdapter(FragmentManager fm) {
super(fm);
// TODOAuto-generated constructor stub
}
@Override
public FragmentgetItem(int position) {
// TODOAuto-generated method stub
returngetPagerFragmentByPosition(position);
}
@Override
public intgetCount() {
// TODOAuto-generated method stub
return 2;
}
}
}
}
今天继续完成剩下的学习部分,现在项目很多地方使用viewpager来提供滑动,今天记录学习viewpager配合fragment的显示,增加一个CallLogsFragment配合之前SMSListFragment
1.CallLogsFragment,主要显示手机的电话记录,这都是之前的代码,所以只要把Activity转换成Fragment就可以了,也一样,
Activity.setContentView(int) 转变成Fragment.onCreateView(View)并且 findViewById也在里面了
Activity.onCreate() 代码 转成 Fragment.onActivityCreated()中
Activity.onResume() 代码 转成 Fragment.onResume() 中
代码如下:
public class CallLogsFragment extendsFragment{
private ListView vList;
private CallPanelView vDial;
private TextView vShowDial;
private CallListAdapter mAdapter;
private Animation mDialHidAnim;
private Animation mDialShowAnim;
@Override
public View onCreateView(LayoutInflaterinflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View root =inflater.inflate(R.layout.activity_calls_list_screen, null);
vList = (ListView)root.findViewById(R.id.activity_call_list_lv);
vShowDial = (TextView)root.findViewById(R.id.activity_call_show_dial);
vDial = (CallPanelView)root.findViewById(R.id.dial_panel_view);
return root;
}
@Override
public void onActivityCreated(BundlesavedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
prepareResourceAndData();
bindView();
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
mAdapter.setCallNumbers(CallCache.getInstance().getCallNumbers());
}
private void prepareResourceAndData(){
mAdapter = newCallListAdapter(getActivity());
mDialHidAnim =AnimationUtils.loadAnimation(getActivity().getApplicationContext(),
R.anim.dial_panel_hidden);
mDialHidAnim.setAnimationListener(newAnimationListener() {
public void onAnimationStart(Animationanimation) {}
public void onAnimationRepeat(Animationanimation) {}
public void onAnimationEnd(Animationanimation) {
// End
vShowDial.setVisibility(View.VISIBLE);
vDial.setVisibility(View.GONE);
}
});
mDialShowAnim =AnimationUtils.loadAnimation(getActivity().getApplicationContext(),
R.anim.dial_panel_show);
mDialShowAnim.setAnimationListener(newAnimationListener() {
public void onAnimationStart(Animationanimation) {}
public void onAnimationRepeat(Animationanimation) {}
public void onAnimationEnd(Animationanimation) {
// End
vShowDial.setVisibility(View.GONE);
}
});
}
private void bindView() {
vList.setAdapter(mAdapter);
vList.setOnItemClickListener(newOnItemClickListener() {
@Override
public voidonItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
CallItemView itemview = (CallItemView)view;
itemview.toggleExpand();
hidDialPanel(true);
}
});
vList.setOnScrollListener(newOnScrollListener() {
public void onScroll(AbsListView view, intfirstVisibleItem, int visibleItemCount, int totalItemCount) {}
@Override
public voidonScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if (scrollState ==OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
hidDialPanel(false);
}
}
});
vDial.setPanelAnim(mDialShowAnim,mDialHidAnim);
vShowDial.setVisibility(View.GONE);
vShowDial.setOnClickListener(newOnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
vDial.show();
}
});
}
private void hidDialPanel(boolean anim){
if (vDial.getVisibility() == View.VISIBLE){
if(anim){
vDial.dismiss();
}else{
vDial.setVisibility(View.GONE);
vShowDial.setVisibility(View.VISIBLE);
}
}
}
}
}
布局修改成,增加ViewPager,去掉原有的容器framelayout:
<?xmlversion="1.0" encoding="utf-8"?>
<
<FrameLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/door_root_content_fl"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<android.support.v4.view.ViewPager
android:id="@+id/door_viewpager_content_vp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="55dp"
android:orientation="horizontal">
<Button
android:id="@+id/door_menu_btn"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="菜单"/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
V4 support
包里面已经帮我们写好了FragmentPagerAdapter,看源码可以知道在PageAdapter.instantiateItem中,有:
Fragmentfragment = mFragmentManager.findFragmentByTag(name);
if (fragment != null) {
if (DEBUG) Log.v(TAG,"Attaching item #" + itemId + ": f=" + fragment);
mCurTransaction.attach(fragment);
} else {
fragment = getItem(position);
if (DEBUG) Log.v(TAG, "Addingitem #" + itemId + ": f=" + fragment);
mCurTransaction.add(container.getId(), fragment,
makeFragmentName(container.getId(), itemId));
}
可以看出
ViewPager在添加fragment 的时候先在FragmentManager里面找有没有,如果没有就会去请求PageAdapter.getItem(position)来生成fragment,进行添加,因此我们只要重写FragmentPagerAdapter并实现getItem方法就可以了,代码如下:
classFragmentAdapter extends FragmentPagerAdapter{
publicFragmentAdapter(FragmentManager fm) {
super(fm);
// TODOAuto-generated constructor stub
}
@Override
public FragmentgetItem(int position) {
// TODOAuto-generated method stub
returngetPagerFragmentByPosition(position);
}
@Override
public intgetCount() {
// TODOAuto-generated method stub
return 2;
}
}privateFragment getPagerFragmentByPosition(int position){
if(position ==FRAG_INDEX_CALL_LOG){
return newCallLogsFragment();
}
if(position == FRAG_INDEX_SMS){
return newSMSListFragment();
}
returnnull;
}
页面完整代码:
public classDoorFragmentActivity extends FragmentActivity{
public staticfinal String FRAG_SMS = "sms_list_frag";
public staticfinal String FRAG_TEXT = "text_frag";
public staticfinal int FRAG_INDEX_CALL_LOG = 0;
public staticfinal int FRAG_INDEX_SMS = 1;
private FragmentmTextFragment;
privateFragmentManager mFragMgr;
privateViewPager vViewPager;
private ButtonmMenuBtn;
@Override
protected voidonCreate(Bundle savedInstanceState) {
// TODOAuto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.door_fragment_activity_layout);
initFragments();
bindViews();
}
private voidbindViews(){
mMenuBtn =(Button) findViewById(R.id.door_menu_btn);
mMenuBtn.setOnClickListener(newOnClickListener() {
@Override
public voidonClick(View v) {
// TODOAuto-generated method stub
showOutFragments(FRAG_TEXT,true);
}
});
vViewPager =(ViewPager) findViewById(R.id.door_viewpager_content_vp);
vViewPager.setAdapter(newFragmentAdapter(mFragMgr));
}
private voidinitFragments(){
mFragMgr = getSupportFragmentManager();
TextFragmenttextfrag = new TextFragment();
textfrag.setMessage("这是
菜单界面");
mTextFragment =textfrag;
}
private voidshowOutFragments(String tag, boolean needback){
FragmentTransactiontrans = mFragMgr.beginTransaction();
trans.setCustomAnimations(R.anim.frag_enter,
R.anim.frag_exit);
trans.add(R.id.door_root_content_fl,getFragmentByTag(tag), tag);
if(needback){
trans.addToBackStack(tag);
}
trans.commit();
}
private FragmentgetFragmentByTag(String tag){
if(FRAG_TEXT.equals(tag)){
returnmTextFragment;
}
returnnull;
}
private FragmentgetPagerFragmentByPosition(int position){
if(position ==FRAG_INDEX_CALL_LOG){
return newCallLogsFragment();
}
if(position ==FRAG_INDEX_SMS){
return newSMSListFragment();
}
returnnull;
}
classFragmentAdapter extends FragmentPagerAdapter{
publicFragmentAdapter(FragmentManager fm) {
super(fm);
// TODOAuto-generated constructor stub
}
@Override
public FragmentgetItem(int position) {
// TODOAuto-generated method stub
returngetPagerFragmentByPosition(position);
}
@Override
public intgetCount() {
// TODOAuto-generated method stub
return 2;
}
}
}
}
相关文章推荐
- Android studio 提示org.gradle.jvmargs=-Xmx1024m类似错误
- XSuperMES移动端运用FragmentActivity适配大屏幕(一)
- 手机摇一摇震动刷新(支持ListView GridView WebView)
- 一步步学习javascript基础篇(3):Object、Function等引用类型
- 关于iOS中简单实现调用系统相机及相册功能
- android res加载
- iOS小技巧14-Openfire管理控制台无法登陆的问
- cocos2dx 保存文件的地址
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十一):完善游戏逻辑
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十一):完善游戏逻辑
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十一):完善游戏逻辑
- PercentLayout的固定比例
- 【Android】2:控件使用及页面跳转实战
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十):创建游戏逻辑
- DVWA系列之1 环境搭建
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十):创建游戏逻辑
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(十):创建游戏逻辑
- Android 多个Activity间对象共享
- Android 中style的使用
- Cocos2D iOS之旅:如何写一个敲地鼠游戏(九):创建动画