应用框架 ViewPager Tab Fragment SlidingMenu
介绍
常见的应用框架 框架一:多个tab+Fragment,点击不同的tab加载不同的Fragment,不能滑动切换只能点击切换; 框架二:多个tab+ViewPager+FragmentPagerAdapter,点击不同的tab加载ViewPager对应的item,可以滑动切换,经过改进,可以实现"强制刷新"!
框架三:多个tab+ViewPager+FragmentPagerAdapter+SlidingMenu,左右滑菜单 其他: 上有标题栏,标题栏可以是在Fragment或ViewPager中的(如QQ,每个页面的标题栏都不一样)或者和tab同级(如微信,所有页面的标题栏都一样)。
框架一,MainActivity
public class MainActivity extends Activity implements OnClickListener { /** * 四个TextView控件 */ private TextView[] mTabTVs = new TextView[4]; /** * 四个控件【未】按下时的图片id */ private int[] mTabTVIdsNormal; /** * 四个控件按下时的图片id */ private int[] mTabTVIdsPress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); initViews(); setTabSelection(mTabTVs[0]); } private void initViews() { mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin); mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend); mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact); mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting); mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal, R.drawable.tab_settings_normal }; mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed, R.drawable.tab_settings_pressed }; //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用 for (int i = 0; i < mTabTVs.length; i++) { mTabTVs[i].setOnClickListener(this); mTabTVs[i].setTag(i); } } @Override public void onClick(View v) { switch (v.getId()) { case R.id.tv_tab_bottom_weixin: case R.id.tv_tab_bottom_friend: case R.id.tv_tab_bottom_contact: case R.id.tv_tab_bottom_setting: setTabSelection(v); break; default: break; } } private void setTabSelection(View v) { //清除掉所有的选中状态 for (int i = 0; i < mTabTVs.length; i++) { mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null); mTabTVs[i].setSelected(false); } // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色 int index = (Integer) v.getTag(); ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null); v.setSelected(true); FragmentTransaction transaction = getFragmentManager().beginTransaction(); switch (index) { case 0: transaction.replace(R.id.id_content, new MainTabFragment());//每次都必须通过new的方式创建Fragment,不然可能出问题 break; case 1: transaction.replace(R.id.id_content, new MainTabFragment()); break; case 2: transaction.replace(R.id.id_content, new MainTabFragment()); break; case 3: transaction.replace(R.id.id_content, new MainTabFragment()); break; } transaction.commit(); } }
框架一,布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="45dp" android:background="@drawable/title_bar" android:gravity="center" android:text="微信" android:textColor="#fff" android:textSize="20sp" android:textStyle="bold" /> <FrameLayout android:id="@+id/id_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="2016" /> <LinearLayout android:id="@+id/ly_main_tab_bottom" android:layout_width="fill_parent" android:layout_height="55dp" android:background="@drawable/bottom_bar" > <TextView android:id="@+id/tv_tab_bottom_weixin" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_weixin_normal" android:gravity="center" android:text="微信" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_friend" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_find_frd_normal" android:gravity="center" android:text="朋友" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_contact" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_address_normal" android:gravity="center" android:text="通讯录" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_setting" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_settings_normal" android:gravity="center" android:text="设置" android:textColor="@drawable/text_color_sel" /> </LinearLayout> </LinearLayout>
框架一,fragment
public class MainTabFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.main_tab_01, container, false); TextView tv = (TextView) view.findViewById(R.id.tv); tv.setText(new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss").format(new Date())); return view; } } <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#fcfcfc" android:orientation="vertical" > <TextView android:id="@+id/tv" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#88cc" android:gravity="center" android:text="第一个页面" android:textColor="#000" android:textSize="30sp" /> </LinearLayout>
框架二,MainActivity
/** * 使用support.v4.app中的Fragment,继承自FragmentActivity * 没办法,使用FragmentPagerAdapter就不可以用app的Fragment,只能用v4的Fragment * 有个问题:viewpage响应的条目会因为自己的缓存机制导致不更新页面 * @author 白乾涛 */ public class MainActivity2 extends FragmentActivity implements OnClickListener { private ViewPager mViewPager; private FragmentPagerAdapter mPagerAdapter; private List<Fragment> mFragments = new ArrayList<Fragment>(); /** * 四个TextView控件 */ private TextView[] mTabTVs = new TextView[4]; /** * 四个控件【未】按下时的图片id */ private int[] mTabTVIdsNormal; /** * 四个控件按下时的图片id */ private int[] mTabTVIdsPress; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); initViews(); initViewPage(); setTabSelection(mTabTVs[0]); } private void initViews() { mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin); mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend); mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact); mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting); mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal, R.drawable.tab_settings_normal }; mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed, R.drawable.tab_settings_pressed }; //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用 for (int i = 0; i < mTabTVs.length; i++) { mTabTVs[i].setOnClickListener(this); mTabTVs[i].setTag(i); } } private void initViewPage() { mFragments.add(new MainTabFragment2()); mFragments.add(new MainTabFragment2()); mFragments.add(new MainTabFragment2()); mFragments.add(new MainTabFragment2()); mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public int getCount() { return mFragments.size(); } @Override public Fragment getItem(int arg0) { return mFragments.get(arg0); } }; mViewPager = (ViewPager) findViewById(R.id.id_viewpager); mViewPager.setAdapter(mPagerAdapter); mViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { setTabSelection(mTabTVs[position]); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } }); } @Override /** *当下面tab的状态改变时,更改ViewPager选中项 */ public void onClick(View v) { switch (v.getId()) { case R.id.tv_tab_bottom_weixin: case R.id.tv_tab_bottom_friend: case R.id.tv_tab_bottom_contact: case R.id.tv_tab_bottom_setting: setTabSelection(v); mViewPager.setCurrentItem((Integer) v.getTag()); break; default: break; } } /** *当ViewPager选中项改变时,更改下面tab的状态 */ private void setTabSelection(View v) { //清除掉所有的选中状态 for (int i = 0; i < mTabTVs.length; i++) { mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null); mTabTVs[i].setSelected(false); } // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色 int index = (Integer) v.getTag(); ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null); v.setSelected(true); } }
框架二,布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="45dp" android:background="@drawable/title_bar" android:gravity="center" android:text="微信" android:textColor="#fff" android:textSize="20sp" android:textStyle="bold" /> <android.support.v4.view.ViewPager android:id="@+id/id_viewpager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="2016" /> <LinearLayout android:id="@+id/ly_main_tab_bottom" android:layout_width="fill_parent" android:layout_height="55dp" android:background="@drawable/bottom_bar" > <TextView android:id="@+id/tv_tab_bottom_weixin" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_weixin_normal" android:gravity="center" android:text="微信" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_friend" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_find_frd_normal" android:gravity="center" android:text="朋友" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_contact" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_address_normal" android:gravity="center" android:text="通讯录" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_setting" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_settings_normal" android:gravity="center" android:text="设置" android:textColor="@drawable/text_color_sel" /> </LinearLayout> </LinearLayout>
框架二,fragment
/** * 使用support.v4.app中的Fragment * @author 白乾涛 */ public class MainTabFragment2 extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.main_tab_01, container, false); TextView tv = (TextView) view.findViewById(R.id.tv); tv.setText(new SimpleDateFormat("yyyy-MM-dd\nHH:mm:ss").format(new Date())); return view; } }
框架3,MainActivity
/** * 只能用v4的Fragment * @author 白乾涛 */ public class MainActivity3 extends SlidingFragmentActivity implements OnClickListener { private ViewPager mViewPager; private FragmentPagerAdapter mPagerAdapter; private List<Fragment> mFragments = new ArrayList<Fragment>(); private ImageView iv_menu_left; private ImageView iv_menu_right; /** * 四个TextView控件 */ private TextView[] mTabTVs = new TextView[4]; /** * 四个控件【未】按下时的图片id */ private int[] mTabTVIdsNormal; /** * 四个控件按下时的图片id */ private int[] mTabTVIdsPress; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.main3); initViews(); initMenu(); initViewPage(); setTabSelection(mTabTVs[0]); } private void initViews() { mTabTVs[0] = (TextView) findViewById(R.id.tv_tab_bottom_weixin); mTabTVs[1] = (TextView) findViewById(R.id.tv_tab_bottom_friend); mTabTVs[2] = (TextView) findViewById(R.id.tv_tab_bottom_contact); mTabTVs[3] = (TextView) findViewById(R.id.tv_tab_bottom_setting); mTabTVIdsNormal = new int[] { R.drawable.tab_weixin_normal, R.drawable.tab_find_frd_normal, R.drawable.tab_address_normal, R.drawable.tab_settings_normal }; mTabTVIdsPress = new int[] { R.drawable.tab_weixin_pressed, R.drawable.tab_find_frd_pressed, R.drawable.tab_address_pressed, R.drawable.tab_settings_pressed }; //给四个控件设置一个Tag,当我们点击某个控件时可以根据这个Tag来识别此控件,当然我们也可以根据v.getid()来识别,但在这里setTag还有其他妙用 for (int i = 0; i < mTabTVs.length; i++) { mTabTVs[i].setOnClickListener(this); mTabTVs[i].setTag(i); } //点击弹出左右侧滑菜单 iv_menu_left = (ImageView) findViewById(R.id.iv_menu_left); iv_menu_right = (ImageView) findViewById(R.id.iv_menu_right); iv_menu_left.setOnClickListener(this); iv_menu_right.setOnClickListener(this); } private void initMenu() { SlidingMenu menu = getSlidingMenu(); //两侧通用设置 menu.setMode(SlidingMenu.LEFT_RIGHT); menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN); menu.setShadowWidthRes(R.dimen.shadow_width); menu.setShadowDrawable(R.drawable.shadow); menu.setBehindOffsetRes(R.dimen.slidingmenu_offset); menu.setFadeDegree(0.35f); //左侧的菜单 setBehindContentView(R.layout.menu_left);//左右侧不能使用同一个布局,并且replace掉的控件的ID不能相同!不知道为什么会有这种情况! Fragment leftMenuFragment = new MainTabFragment2("左侧的"); getSupportFragmentManager().beginTransaction().replace(R.id.menu_left, leftMenuFragment).commit(); //右侧菜单设置 menu.setSecondaryShadowDrawable(R.drawable.shadow);//根据资源文件ID来设置右边(二级)滑动菜单的阴影效果 menu.setSecondaryMenu(R.layout.menu_right);//设置右边侧滑菜单 Fragment rightMenuFragment = new MainTabFragment2("右侧的"); getSupportFragmentManager().beginTransaction().replace(R.id.menu_right, rightMenuFragment).commit(); } private void initViewPage() { mFragments.add(new MainTabFragment2("第1个")); mFragments.add(new MainTabFragment2("第2个")); mFragments.add(new MainTabFragment2("第3个")); mFragments.add(new MainTabFragment2("第4个")); mPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public int getCount() { return mFragments.size(); } @Override public Fragment getItem(int arg0) { return mFragments.get(arg0); } }; mViewPager = (ViewPager) findViewById(R.id.id_viewpager); mViewPager.setAdapter(mPagerAdapter); mViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { setTabSelection(mTabTVs[position]); } @Override public void onPageScrollStateChanged(int arg0) { } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } }); } @Override /** *当下面tab的状态改变时,更改ViewPager选中项 */ public void onClick(View v) { switch (v.getId()) { case R.id.tv_tab_bottom_weixin: case R.id.tv_tab_bottom_friend: case R.id.tv_tab_bottom_contact: case R.id.tv_tab_bottom_setting: setTabSelection(v); mViewPager.setCurrentItem((Integer) v.getTag()); break; case R.id.iv_menu_left: getSlidingMenu().showMenu(); break; case R.id.iv_menu_right: getSlidingMenu().showSecondaryMenu(); break; default: break; } } /** *当ViewPager选中项改变时,更改下面tab的状态 */ private void setTabSelection(View v) { //清除掉所有的选中状态 for (int i = 0; i < mTabTVs.length; i++) { mTabTVs[i].setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsNormal[i]), null, null); mTabTVs[i].setSelected(false); } // 改变控件的图片,这里的setSelected是为了演示通过selector来改变文字颜色 int index = (Integer) v.getTag(); ((TextView) v).setCompoundDrawablesWithIntrinsicBounds(null, getResources().getDrawable(mTabTVIdsPress[index]), null, null); v.setSelected(true); } }
框架3,布局
main3.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="45dp" android:background="@drawable/title_bar" android:orientation="horizontal" > <ImageView android:id="@+id/iv_menu_left" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginLeft="3dp" android:src="@drawable/showleft_normal" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_weight="2016" android:gravity="center" android:text="微信" android:textColor="#fff" android:textSize="20sp" android:textStyle="bold" /> <ImageView android:id="@+id/iv_menu_right" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_marginRight="3dp" android:src="@drawable/showright_normal" /> </LinearLayout> <android.support.v4.view.ViewPager android:id="@+id/id_viewpager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> <LinearLayout android:id="@+id/ly_main_tab_bottom" android:layout_width="fill_parent" android:layout_height="55dp" android:background="@drawable/bottom_bar" > <TextView android:id="@+id/tv_tab_bottom_weixin" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_weixin_normal" android:gravity="center" android:text="微信" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_friend" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_find_frd_normal" android:gravity="center" android:text="朋友" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_contact" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_address_normal" android:gravity="center" android:text="通讯录" android:textColor="@drawable/text_color_sel" /> <TextView android:id="@+id/tv_tab_bottom_setting" android:layout_width="0dp" android:layout_height="fill_parent" android:layout_weight="1" android:drawableTop="@drawable/tab_settings_normal" android:gravity="center" android:text="设置" android:textColor="@drawable/text_color_sel" /> </LinearLayout> </LinearLayout> menu_left.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/menu_left" android:layout_width="match_parent" android:background="#ccf" android:layout_height="match_parent" /> menu_right.xml <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/menu_right" android:layout_width="match_parent" android:background="#ccf" android:layout_height="match_parent" />
附件列表
应用框架 ViewPager Tab Fragment SlidingMenu的更多相关文章
- ViewPager+tab+Fragment的滑动
package teamhgl.xinwensudu; import android.os.Bundle;import android.support.v4.app.Fragment;import a ...
- Android tab导航的几种方法:ActionBar tab +fragment,Viewpager+pagerTitleStrip,开源框架ViewPageIndicator 和 ViewPager
action来实现tab标签 并跟fragment结合 因为要写新闻客户端这个tab导航是必须的 这里我写几个小练习,希望大家融会贯通. 1actionbar设置tab +fragment 布局是个l ...
- Android开发之ViewPager+ActionBar+Fragment实现响应式可滑动Tab
今天我们要实现的这个效果呢,在Android的应用中十分地常见,我们可以看到下面两张图,无论是系统内置的联系人应用,还是AnyView的阅读器应用,我们总能找到这样的影子,当我们滑动屏幕时,Tab可 ...
- 低版本系统兼容的ActionBar(六)用Fragment+ViewPager+Tab实现快速导航
Tab经常和Fragment结合使用,这一讲我们用3种方式来实现这种快捷导航. 0.重要的两个监听器 MyTabListener,这个我们之前已经接触过了 package com.kale.actio ...
- ViewPager之Fragment页面切换
一.概述 ViewPager是android-support-v4中提供的类,它是一个容器类,常用于页面之间的切换. 继上篇文章<ViewPager之引导页>之后,本文主要介绍ViewPa ...
- ViewPager和Fragment的结合使用fragment里包含着listview的常见问题
在我们开发的过程中可能会遇到类似需求,我们需要做一个左右滑动的tab导航,这个时候有些朋友可能会想到viewpager和fragment的结合来实现这个功能:当然实现的方法不单单着一种.我们这个随笔讨 ...
- 【 Android 】ViewPager + TabLayout + Fragment 数据初始化问题
在 ViewPager 和 Fragment 配合使用的时候,ViewPager 会使用预加载机制,使得我们在没有切换到到对应页面时,就已经加载好了,这是个非常不好的用户体验. 所以本示例项目就诞生了 ...
- 使用ViewPager切换Fragment时,防止频繁调用OnCreatView
使用ViewPager切换Fragment,我原先使用系统自带的适配器FragmentPagerAdapter. 切换fragment时,频繁调用oncreatview(). 查看FragmentPa ...
- viewpager和fragment预加载的解决
在使用Viewpager和fragment处理中会出现预加载的问题,最近看别人的代码,终于找到了一个很好的处理方法 能有效的解决预加载的问题,在fragment都继承一个重写setUserVisibl ...
随机推荐
- Java学习----不变的常量
byte: -128~+127 short int:129 long float:1.5f (1.5被系统默认为double) double:4.5d char:'s' '1' boolean:t ...
- jquery mobile selectmenu下拉菜单
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- underscorejs-max学习
2.15 max 2.15.1 语法: _.max(list, [iteratee], [context]) 2.15.2 说明: 返回list中的最小值. list为集合,数组.对象.字符串或arg ...
- C# .net 如何根据访问者IP获取所在地区
第一步:在根目录添加新项(类),新建一个类文件,把以下文件粘贴到该类文件下: using System; using System.Collections.Generic; using Syste ...
- oracle删除互相关联的记录
今天遇到一个问题,在数据库中删除一条记录,但是在删除的时候报错了,报出该记录已经被其他子记录引用,想了好久不知道怎么做,后来发现报错提示信息中会提示删除该记录时影响了那个约束条件,于是思路出来了: 1 ...
- weekly review
鉴于某位昔日工作在我身边的大师一直在写review,所以为了能靠近大师,我也要开始写review了. 无名师曾经说过,想要成为大师的话,要先找到一个大师,然后追随大师,再然后与大师通行,之后成为大师, ...
- 牛人总结python中string模块各属性以及函数的用法,果断转了,好东西
http://blog.chinaunix.net/uid-25992400-id-3283846.html http://blog.csdn.net/xiaoxiaoniaoer1/article/ ...
- Unable to boot device in current state: Creating
安装完xcode6.1后,将其改名为Xcode6.1.app,再移动个位置,启动模拟器,问题来了: Unable to boot device in current state: Creating 解 ...
- 之前C#代码的重新设计
/* 我用python重构了一把这个代码 大家的反应似乎是过度设计了 好吧,我决定不那么激进,采用更中庸一些的重构 我也有些疑惑: 是否如果重构后的代码比重构前要多,就算过度了呢? */ void m ...
- POJ3267 The Cow Lexicon(dp)
题目链接. 分析: dp[i]表示母串从第i位起始的后缀所对应的最少去掉字母数. dp[i] = min(dp[i+res]+res-strlen(pa[j])); 其中res 为从第 i 位开始匹配 ...