当前位置:  编程技术>移动开发
本页文章导读:
    ▪Objective-C 中的非一般数据类型        Objective-C 中的特殊数据类型 我们在这里解释一下它们的细节:   id   id和void *并非完全一样。在上面的代码中,id是指向struct objc_object的一个指针,这个意思基本上是说,id是一个指向任.........
    ▪ 感受NetBeans IDE 6.8 (一)        体验NetBeans IDE 6.8 (一) 今天我去了sun官网了,发现它的布局有很大的变化,主要都是Oracle的主题,可能是因为2009年Oracle将Sun收购的原因吧。不过我发现NetBeans又升级了,最开始用的是NetB.........
    ▪ 【转】Adapter运用总结       【转】Adapter应用总结 Adapter应用总结 首先来看一下Adapter的体系结构:     一个Adapter的对象扮演一个桥梁的角色。这个桥梁连接着一个AdapterView和它所包含的数据。Adapter提供了一个通到数.........

[1]Objective-C 中的非一般数据类型
    来源: 互联网  发布时间: 2014-02-18
Objective-C 中的特殊数据类型

我们在这里解释一下它们的细节:

 

id

 

id和void *并非完全一样。在上面的代码中,id是指向struct objc_object的一个指针,这个意思基本上是说,id是一个指向任何一个继承了Object(或者NSObject)类的对象。需要注意的是id 是一个指针,所以你在使用id的时候不需要加星号。比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类。而id *foo=nil则定义了一个指针,这个指针指向另一个指针,被指向的这个指针指向NSObject的一个子类。

 

nil

 

nil和C语言的NULL相同,在objc/objc.h中定义。nil表示一个 Objctive-C对象,这个对象的指针指向空(没有东西就是空)。

 

Nil

 

首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是 对象)。

 

SEL

 

这个很有趣。SEL 是“selector ”的一个类型,表示一个方法的名字。比如以下方法:

 

-[Foo count ] 和 -[Bar count ] 使用同一个selector ,它们的selector 叫做count 。

 

在上面的头文件里我们看到,SEL 是指向 struct objc_selector的指针,但是objc_selector是什么呢?那么实际上,你使用GNU Objective-C的运行时间库和NeXT Objective-C的运行运行时间库(Mac OS X使用NeXT的运行时间库)时,它们的定义是不一样的。实际上Mac OSX仅仅将SEL映射为C字符串。比如,我们定义一个Foo的类,这个类带有一个- (int ) blah方法,那么以下代码:

 

  • NSLog ( @"SEL=%s" , @selector ( blah) ) ;
  •  

     

    会输出为 SEL=blah。

     

    说白了SEL就是返回方法名。


        
    [2] 感受NetBeans IDE 6.8 (一)
        来源: 互联网  发布时间: 2014-02-18
    体验NetBeans IDE 6.8 (一)
    今天我去了sun官网了,发现它的布局有很大的变化,主要都是Oracle的主题,可能是因为2009年Oracle将Sun收购的原因吧。不过我发现NetBeans又升级了,最开始用的是NetBeans5.5的,因为太吃内存,所以转用Eclipse,而今天NetBeans又出新产品,对于以前Sun公司主推的IDE,目前市场已经也没有太大变化。所以以新的设计与软件开发新思维来推出他的新产品,而且是免费的,永久性使用的,比MyEclipse强些了,大家可以去下载使用,下载地址:
    http://netbeans.org/downloads/index.html

    我已安装完,初始非的感觉很好,支持第三方插件,如果你是做J2ME开发的话,我建意你使用它。

        
    [3] 【转】Adapter运用总结
        来源: 互联网  发布时间: 2014-02-18
    【转】Adapter应用总结

    Adapter应用总结

    首先来看一下Adapter的体系结构:

     

     

    一个Adapter的对象扮演一个桥梁的角色。这个桥梁连接着一个AdapterView和它所包含的数据。Adapter提供了一个通到数据项的途径。Adapter还负责为在数据集里的每个数据生项生成一个View。它有一个重要的方法:public abstract View getView (int position,View convertView,ViewGroup parent)。这个方法被setListAdapter(adapter)间接地调用。getView 方法的作用是得到一个View,这个view显示数据项里指定位置的数据,你可以或者手动创建一个view或者从一个XML layout中inflate。当这个view被inflated,它的父view(如GridView,ListView等)将要使用默认的layout参数,除非你用inflate(int,android.view.ViewGroup,boolean)方法来指定一个根view并防止附着在根上。

     

    下面分别讲一下它的几个常见的子类:

     

    ListAdapter接口:继承于Adapter。ListAdapter是一个ListView和list上的数据之间的桥梁。数据经常来自于一个Cursor,但这不是必须的。ListView能显示任何数据,只要它是被一个ListAdapter包装的。

     

    BaseAdapter抽象类:是一个实现了既能在ListView(实现了ListAdapter接口)和Spinner(实现了Spinner接口)里用的Adapter类的一般基类。

     

    ArrayAdapter类:一个管理这样的ListView的ListAdapter:这个ListView被一个数组所支持。这个数组可装任意对象。默认状态下,这个类预期能这样:提供的资源id与一个单独的TextView相关联。如果你想用一个更复杂的layout,就要用包含了域id的构造函数。这个域id能够与一个在更大的layout资源里的TextView相关联。它将被在数组里的每个对象的toString()方法所填满。你可以添加通常对象的lists或arrays。重写你对象的toString()方法来决定list里哪一个写有数据的text将被显示。如果想用一些其它的不同于TextView的view来显示数组(比如ImageViews),或想有一些除了toString()返回值所填在views里的以外的数据,你就要重写getView(int,View,ViewGroup)方法来返回你想要的View类型。

     

    SimpleAdapter类:一个使静态数据和在XML中定义的Views对应起来的简单adapter。你可以把list上的数据指定为一个Map范型的ArrayList。ArrayList里的每一个条目对应于list里的一行。Maps包含着每一行的数据。你先要指定一个XML,这个XML定义了用于显示一行的view。你还要指定一个对应关系,这个对应关系是从Map的keys对应到指定的views。绑定数据到views发生在两个阶段:

     

    如果一个simpleAdapter.ViewBinder是可用的,那么SetViewValue(android.view.View,Object,String)要被调用。如果返回true,那么绑定发生了。如果返回false,那么如下views将被按顺序地尝试:

     

    ~实现了Checkable的View(如CheckBox),预期的绑定值是boolen

     

    ~TextView,预期的绑定值是String,并且SetViewText方法被调用

     

    ~ImageView,预期的绑定值是一个资源的id或String。并且SetViewImage方法被调用

     

    如果没有合适的绑定被发现,一个IllegalStateException被抛出。

     

    下面是一个SimpleAdapter的例子:

     

     

    /*--------------------mail.xml---------------------------*/

     

     

     

     

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

     

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:id="@+id/MyListView">

     

     

     

     

     

    /*--------------------simple_list_item_2.xml---------------------------*/

     

     

     

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/widget0"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent">

     

    android:id="@+id/ItemImage"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content">

     

     

    android:id="@+id/ItemTitle"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="TextView"

    android:layout_x="50px"

    android:textSize="15pt">

     

     

    android:id="@+id/ItemText"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="TextView"

    android:layout_x="50px"

    android:layout_y="40px">

     

     

    android:id="@+id/ItemCheck"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_x="270px">

     

     

     

    /*--------------------TestUIList.java---------------------------*/

     

    public class TestUIList extends Activity {

     

    public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

     

    ListView list = (ListView) findViewById(R.id.MyListView);

     

     

    ArrayList> lstImageItem = new ArrayList>();

    String[] str1 = { "row one", "row two", "row three", "row four" };

    String[] str2 = { "第一行", "第二行", "第三行", "第四行" };

    for (int i = 0; i < str1.length; i++) {

    HashMap map = new HashMap();

    map.put("ItemImage", R.drawable.icon);

    map.put("ItemTitle", str1[i]);

    map.put("ItemText", str2[i]);

    lstImageItem.add(map);

    }

     

     

    SimpleAdapter saImageItems = new SimpleAdapter(this,

    lstImageItem,

    R.layout.simple_list_item_2,

     

    new String[] { "ItemImage", "ItemTitle", "ItemText" },

    new int[] { R.id.ItemImage, R.id.ItemTitle, R.id.ItemText });

     

    list.setAdapter(saImageItems);

    }

    }

     

    如果你的ListView的每一行想实现被点击后有响应事件。最省事发的方法是继承一个ListActivity。ListActivity是一个这样的Activity:这个Activity能通过绑定到一个像array或cursor这样的数据源来显示一些items的list,并且当用户选了一个item时,能够暴露事件句柄。

     

    ListActivity拥有一个ListView对象。这个ListView对象能够被绑定到不同的数据源,特别是一个数组或者一个拥有查询结果的Cursor。ListActivity有三种用法,分别是Binding,Screen Layout和Row Layout。下面仅讨论一下Screen Layout:

     

    ListActivity有一个默认的layout。这个 layout是由一个在屏幕中央的、单独的、全屏的list构成。然而,如果你想的话,你可以通过在onCreate()里调用setContentView()方法来设置你自己的view layout的方式制定屏幕layout。要这样做,你自己的view必须包含一个id为“@android:id/android:list”(或者在代码中有list对象)。

     

    随意地,当你制定这个view是空的时,你能够包含任何类型的view对象来显示。这个“空list”通知者必须有一个id“android:empty”。

     

    注意,最后一定要调用setListAdapter(adapter)方法来把通过Adapter绑定了数据的这个List显示出来。setListAdapter方法间接调用了Adapter的getView方法,其作用是返回你想要的view类型。而且当点击listView里的item时,会根据getView重画这个ListView。例子可参见《Android SDK开发大全》中的“资源管理器“的例子。

     

    想要实现事件监听,就要重写 protected void onListItemClick(ListView l, View v, int position,long id)方法。

     

    想要把在XML中自定义了一行的view逐行显示在ListActivity中自定义的ListView中,并且在每行动态绑定数据的话,一般要自己写一个MyAdapter类,这个Adapter继承BaseAdapter并且其构造函数中至少有一个List参数来实现动态绑定数据。有两个重要的步骤:

     

    1)重写getView方法,其中一重要步骤就是用items.get(position)方法来获得被传入的数据。其中items是一个List,它被赋了传入的List参数的值。position是这个数据在ListView中的行数。Get返回的是E类型.即List中的模板类型。

     

    2)写一个内部类private class ViewHolder。这个内部类只有成员变量,它们就是你想在ListView中的一行里要显示的小View成分。

     

    要想在Adapter中动态传入其它类的数据,就要在构造函数中再增加一个(或更多)List参数。

     

    最后我们给出自己些的MyAdapter配合ListActivity实现监听事件的例子:

     

     

    /*--------------------MyHome.java-----------------------*/

     

     

    package com.li.android.myhome;

     

    import java.util.ArrayList;

    import java.util.List;

     

    import android.app.AlertDialog;

    import android.app.ListActivity;

    import android.content.DialogInterface;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.ListView;

     

    public class MyHome extends ListActivity

    {

     

    private List items = null;

     

    protected void onCreate(Bundle icicle)

    {

     

    super.onCreate(icicle);

     

    setContentView(R.layout.main);

     

    items = new ArrayList();

     

    String[] titles =

    { "默认主题", "主题-A", "主题-B", "中秋佳节", "粉红女郎", "花样年华" };

     

    for (int i = 0; i < titles.length; i++)

    {

     

    String title = titles[i];

    items.add(title);

     

    }

     

    setListAdapter(new MyAdapter(this, items));

    }

     

    @Override

    protected void onListItemClick(ListView l, View v, int position,

    long id)

    {

    new AlertDialog.Builder(MyHome.this).setItems(

    R.array.items_my_dialog, new DialogInterface.OnClickListener()

    {

    public void onClick(DialogInterface dialog, int whichcountry)

    {

     

    }

    })

     

    .show();

    }

     

    }

     

     

    /*--------------------MyAdapter.java-----------------------*/

     

     

    package com.li.android.myhome;

     

    import java.util.List;

    import android.content.Context;

    import android.graphics.Bitmap;

    import android.graphics.BitmapFactory;

    import android.view.LayoutInflater;

    import android.view.View;

    import android.view.ViewGroup;

    import android.widget.BaseAdapter;

    import android.widget.ImageView;

    import android.widget.TextView;

     

    public class MyAdapter extends BaseAdapter

    {

     

    private LayoutInflater mInflater;

     

    private Bitmap icom_theme;

     

    private Bitmap icon_selected32;

     

    private List items;

     

    public MyAdapter(Context context, List it)

    {

     

    mInflater = LayoutInflater.from(context);

    items = it;

     

    icom_theme = BitmapFactory.decodeResource(context.getResources(),

    R.drawable.theme);

    icon_selected32 = BitmapFactory.decodeResource(context

    .getResources(), R.drawable.selected32);

     

    }

     

    public int getCount()

    {

    return items.size();

    }

     

    public Object getItem(int position)

    {

    return items.get(position);

    }

     

    public long getItemId(int position)

    {

    return position;

    }

     

    public View getView(int position, View convertView, ViewGroup parent)

    {

    ViewHolder holder;

     

    convertView = mInflater.inflate(R.layout.file_row, null);

     

    holder = new ViewHolder();

    holder.text = (TextView) convertView.findViewById(R.id.text);

    holder.mTheme = (ImageView) convertView.findViewById(R.id.theme);

    holder.mSelected32 = (ImageView) convertView

    .findViewById(R.id.selected32);

     

    holder.mTheme.setImageBitmap(icom_theme);

     

    String title = items.get(position);

    holder.text.setText(title);

     

    holder.mSelected32.setImageBitmap(icon_selected32);

     

    return convertView;

    }

     

    private class ViewHolder

    {

    TextView text;

    ImageView mTheme;

    ImageView mSelected32;

    }

    }

     

    /*--------------------main.xml-----------------------*/

     

     

     

     

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

     

     

    android:id="@android:id/list"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    >

     

     

     

     

    /*-------------------- file_row.xml-----------------------*/

     

     

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/widget0"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent" >

     

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    >

     

     

     

    android:id="@+id/text"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:layout_x="50px"

    android:textSize="15pt">

     

     

    android:id="@+id/selected32"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_x="270px">

     

     

     

     

     

    /*--------------------string.xml-----------------------*/

     

     

    Hello World, 仿熊猫

    仿熊猫

     

    应用主题

    编辑主题

    删除主题


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪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