当前位置:  编程技术>移动开发
本页文章导读:
    ▪ViewPager中怎么获取Fragment        ViewPager中如何获取Fragment     在做项目时,遇到Fragment与Fragment、Fragment与Activity需要相互通信、传递数据以及进行互   操作的问题,查阅了官方文档,也实现了官方的例子,但实际项目是View.........
    ▪ 关于java.text.Collator.compare比较中文不准有关问题        关于java.text.Collator.compare比较中文不准问题 Collator.getInstance(Locale.CHINA) ......
    ▪ xcode 四 制作静态库详解       xcode 4 制作静态库详解 最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法。.........

[1]ViewPager中怎么获取Fragment
    来源: 互联网  发布时间: 2014-02-18
ViewPager中如何获取Fragment

    在做项目时,遇到Fragment与Fragment、Fragment与Activity需要相互通信、传递数据以及进行互

 

操作的问题,查阅了官方文档,也实现了官方的例子,但实际项目是ViewPager+Fragment,按官方的例

 

子,总是获取不到Fragment的引用,如:

 

HeadLinesFragment headLinesFrag = (HeadLinesFragment)

        getSupportFragmentManager().findFragmentById(R.id.headline_fragment);

 

    这是因为在ViewPager里Fragment是new出来动态加到ViewPager里的,上需的Id只是Fragment的布

 

局文件的根Id,不是Fragment 的Id,故获取的Fragment为空

 

查询相关资料后,终于找到如下:

 

    一般来讲,我们再使用viewpager的时候,是在代码中动态的添加fragment。此时,我们不能去指定

 

fragment的id,也不能指定他的tag,如果你一定要去指定tag,运行时会提示,tag已经被指定。那么,在动

 

态的添加了fragment之后,我们如何能获取到该fragment并修改其中的内容呢。两种方法:

 

第一种方法实际上是一种hack方法,并没有官方文档说明支持。代码如下:

SomeFragment someFragment  = getSupportFragmentManager().FindFragmentByTag(“android:switcher:” + R.id.viewpager + “:0″);

if (someFragment != null) //可能没有实例化

{

if (someFragment.getView() != null)

{

someFragment.updateView();//自定义方法更新

}

}

    这里要记住的就是”android:switcher:” + R.id.viewpager + “:0″ 这个字符窜表示的就是该

 

fragment的tag,其中0 是fragment 在viewpager中的位置。

 

    第二种方法更正规,因为第一种方法对基于FragmentPagerAdapter的实现是有效的,但对于

 

FragmentStatePagerAdapter就无效了。因为FragmentStatePagerAdapter不会对传给

 

FragmentManager的Fragment设置tag.

ViewPager pager = (ViewPager)findViewById(R.id.viewpager);

FragmentStatePagerAdapter f = pager.getAdapter();

SomeFragment someFragment = (SomeFragment)f.instantiateItem(pager,position);

    instantiateItem(pager,position)方法会返回在position位置的fragment的引用。如果该

 

fragment 已经实例化了,再次调用instantiateItem(pager,position)的时候,该方法并不会调用

 

getItem()来再次实例化fragment,而是直接返回引用。

 

    方法三更简单:

 

    Activity里的语句:

 mPagerAdapter = new DownloadSlidePagerAdapter(getSupportFragmentManager());

 LocalVideoListFragment fragment =                ((LocalVideoListFragment)mPagerAdapter.getItem(mCurrItem));

 

 fragment.refresh();

 

    DownloadSlidePagerAdapter:

 public class DownloadSlidePagerAdapter extends FragmentPagerAdapter {

 

Fragment[] fragments = {new DownloadListFragment(),new      LocalVideoListFragment()};

 

    public DownloadSlidePagerAdapter(FragmentManager fm) {

         super(fm);

    }

 

    @Override

    public Fragment getItem(int position) {

          return fragments[position];

    }

 

    @Override

     public int getCount() {

          return fragments.length;

     }

    }

 

   直接获取new的实例对象应用

 

 


    
[2] 关于java.text.Collator.compare比较中文不准有关问题
    来源: 互联网  发布时间: 2014-02-18
关于java.text.Collator.compare比较中文不准问题
Collator.getInstance(Locale.CHINA)

    
[3] xcode 四 制作静态库详解
    来源: 互联网  发布时间: 2014-02-18
xcode 4 制作静态库详解
最近在做Apple的IOS开发,有开发静态库的需求,本身IOS的开发,只允许静态库或者Framework。在Xcode上没有找到允许编译,如同Android上的*.so和Win32上的dll这样的说法。不过Framework这样的框架,估计也是类似动态库的实现,不过没有具体研究过,后续继续深入研究。

我这个文档的静态库的开发是基于Xcode4.2和iOS SDK5.0编写的。Xcode4跟之前的Xcode3还是有不少的差别的。

下面就简单写一个静态库和一个调用静态库的例子。

静态库的编写:

1.静态库工程的建立:

Xcode New一个新的project,选择IOS下面的Framework&Library,下面有一个Cocoa Touch Static Library。直接next去建立一个Print这样的工程。



2.工程建立

我们添加很简单的"- (void)printA;"和"+ (void)printB;"的方法,这个方法的实现也是很简单的,在*.m文件中的实现就是一个"NSLog(@“”);"这样我们编译出来的libstaticlib就可以被其他的IOS工程进行调用了。这块注意一下,目前我们的Print->iOS Device





3.编译前准备

这里分release与debug版本,需要设置一下



4.OK,编译

我们可以在Products下面找到我们编译生成的libstaticlib.a这个文件。

注意未编译前为红色:左                             编译后为黑色: 右

      


5.ok

在右边 这个文件上右键Open In Finder。这时候我们打开了一个文件夹,里面有一个libPrint.a。后面我们继续编写一个调用这个libPrint.a的App。但是这个App在编译时候会出错,通过这个错误的解决,说明Xcode的一些编译相关的东西。这里,我们在command下面根据路径找到这个文件,用这个非常重要的命令查看一下这个lib的信息!

打开终端写入如下命令:这是什么?这就是所在的路径

以下均是在自己的mac上的路径。你需要将/Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/ 替换成你的路径。

cd /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/ 

我们手动打开这个路径:可以看到如下信息:Release-iphoneos



这个是给真机用的,那我们要给模拟器和真机封装的静态库应该都能用才好。这个下面介绍!!!!! 




然后再在终端 打开这个文件:cd /Users/user/Library/Developer/Xcode/DerivedData/UItab-dbvoszbzpavyglaboxgflvrnzfce/Build/Products/Debug-iphoneos

命令是:lipo -info libPrint.a,可以看到显示的结果是:Arch是  Arm7。下面我会具体介绍一下。



6.建立一个调用这个libPrint.a的应用

应用就很简单了,我们添加刚才libPrint.a的*.h文件。 然后在这个工程的Build Phases的Link Binary With Library里面添加我们刚才拷贝出来的那个libPrint.a。




7.插入了h和a文件后

我们就可以在control里面调用这个libPrint.a 函数了。

#import "AstroDiskAppDelegate.h"
#import "Print.h"


@implementation AstroDiskAppDelegate

@synthesize window = _window;

- (void)dealloc
{
    [_window release];
    [_viewController release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   
    //调用libPrint.a
    [Print printB];
    Print  *print = [[[Print alloc] init] autorelease];
    [print printA];

    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    [self.window makeKeyAndVisible];
    return YES;
}


8.OK,编译运行这个应用程序。

编译出现错误了。这个就是这篇文档的关键了。主要就是为了介绍编译静态库相关的东西。





9.可以看到undefine symbols for architecture i386这样的错误。

其实这个错误原因很简单,就是因为,我们用错了编译出来的libUITab.a lib,在模拟器里面,我们需要的是基于i386构架编译的static lib,但是这个a文件,大家还记得前面说的arm6 arm7构架的么。这个a其实是在iphone这个arm构架上运行的代码。其实show in finder指向的是一个ios device的库,并不是i386模拟器下的库。那如何编译i386的库呢?看见第二张图片的Print>IOS Device了么?我们将这个iOS Device修改成iPhone5.0 Simulator。在进行编译,这样就可以编译出i386下面的库。这个时候我们show in finder打开的文件夹还是ios device下的库。我们最好自己去那个目录下看一下。这里我们用command去查看了一下目录情况,如下:可以看到一个iphoneos的目录和一个simulator的目录。



然后我们再看看这个目录与第4条所示的目录有什么不同! 同样也有一个libPrint.a文件。





10.错误原因分析

Release-iphoneos里面的是基于arm6 arm7编译出来的库文件。Release-iphonesimulator文件夹下面的是基于i386编译出来的文件。

11.合并.a文件,制作通用静态库

这二个库一个是用于真机运行的一个是用于模拟器运行的.其实我们可以利用lipo将这二个文件打包成一个通用的a文件。命令如下:

将/Users/user/Library/Developer/Xcode/DerivedData/UITab-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products替换成你的路径。

将/Users/user/Desktop/libPrint.a替换成合并后的路径。

lipo -create /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphonesimulator/libPrint.a  /Users/pjk1129/Library/Developer/Xcode/DerivedData/Print-dgfkluumuexoxhcapzidtsmdgqcj/Build/Products/Release-iphoneos/libPrint.a  -output /Users/pjk1129/Desktop/libPrint.a


12.打包以后的库文件,我们查看信息

然后打入如下命令:lipo -info /Users/pjk1129/Desktop/libPrint.a

可以看到如下信息:




如上,你已经看到了,它具备了i386和arm7的条件。 现在我们这个静态库,支持的构架已经是armv7 i386了。


13.ok,经过上述步骤后
这个通用库生成后,我们将原来,调用这个库进行替换一下,在进行编译,成功编译,运行结果如下所示:





原文:http://blog.csdn.net/pjk1129/article/details/7255163

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
编程技术其它 iis7站长之家
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3