The NoteBook of EricKong

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

          #

          下面是本篇的大綱:

              * 1、AppWidget 框架類
              * 2、在 Android 如何使用 Widget
              * 3、AppWidget 框架的主要類介紹
              * 4、DEMO 講解

          1、AppWidget 框架類

              * 1、AppWidgetProvider :繼承自 BroadcastRecevier , 在AppWidget 應(yīng)用 update、enable、disable 和 delete 時(shí)接收通知。其中,onUpdate、onReceive 是最常用到的方法,它們接收更新通知。
              * 2、 AppWidgetProvderInfo:描述 AppWidget 的大小、更新頻率和初始界面等信息,以XML 文件形式存在于應(yīng)用的 res/xml/目錄下。
              * 3、AppWidgetManger :負(fù)責(zé)管理 AppWidget ,向 AppwidgetProvider 發(fā)送通知。
              * 4、RemoteViews :一個(gè)可以在其他應(yīng)用進(jìn)程中運(yùn)行的類,向 AppWidgetProvider 發(fā)送通知。

          2、在 Android 如何使用 Widget

              * 1、長按主界面
          1.jpg
              * 2、之后彈出一個(gè)對話框,里面就有android 內(nèi)置的一些桌面組件
          appwidget.png

          3、AppWidget 框架的主要類介紹

          1) AppWidgetManger 類

              * bindAppWidgetId(int appWidgetId, ComponentName provider)
                通過給定的ComponentName 綁定appWidgetId
              * getAppWidgetIds(ComponentName provider)
                通過給定的ComponentName 獲取AppWidgetId
              * getAppWidgetInfo(int appWidgetId)
                通過AppWidgetId 獲取 AppWidget 信息
              * getInstalledProviders()
                返回一個(gè)List<AppWidgetProviderInfo>的信息
              * getInstance(Context context)
                獲取 AppWidgetManger 實(shí)例使用的上下文對象
              * updateAppWidget(int[] appWidgetIds, RemoteViews views)
                通過appWidgetId 對傳進(jìn)來的 RemoteView 進(jìn)行修改,并重新刷新AppWidget 組件
              * updateAppWidget(ComponentName provider, RemoteViews views)
                通過 ComponentName 對傳進(jìn)來的 RemoeteView 進(jìn)行修改,并重新刷新AppWidget 組件
              * updateAppWidget(int appWidgetId, RemoteViews views)
                通過appWidgetId 對傳進(jìn)來的 RemoteView 進(jìn)行修改,并重新刷新AppWidget 組件

          2) 繼承自 AppWidgetProvider 可實(shí)現(xiàn)的方法為如下:

              * 1、onDeleted(Context context, int[] appWidgetIds)
              * 2、onDisabled(Context context)
              * 3、onEnabled(Context context)
              * 4、onReceive(Context context, Intent intent)
                Tip:因?yàn)?AppWidgetProvider 是繼承自BroadcastReceiver  所以可以重寫onRecevie 方法,當(dāng)然必須在后臺注冊Receiver
              * 5、onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)

          4、Demo講解

          下面是我今天做的一個(gè)實(shí)例,提供給大家練習(xí)時(shí)做參考,效果如下:在布局中放一個(gè) TextView 做桌面組件,然后設(shè)置TextView 的 Clickable="true" 使其有點(diǎn)擊的功能,然后我們點(diǎn)擊它時(shí)改變它的字體,再點(diǎn)擊時(shí)變回來,詳細(xì)操作如下流程:

              * 1、新建AppWidgetProvderInfo
              * 2、寫一個(gè)類繼承自AppWidgetProvider
              * 3、后臺注冊Receiver
              * 4、使 AppWidget 組件支持點(diǎn)擊事件
              * 5、如何使TextView 在兩種文本間來回跳轉(zhuǎn)

          問題拋出來了,那么一起解決它吧。

          1、新建AppWidgetProvderInfo

          代碼如下:
          1. <?xml version="1.0" encoding="UTF-8"?>
          2. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
          3.     android:minWidth="60dp"
          4.     android:minHeight="30dp"
          5.     android:updatePeriodMillis="86400000"
          6.      
          7.     android:initialLayout="@layout/main">
          8. </appwidget-provider>
          復(fù)制代碼
          Tip:上文說過AppWidgetProvderInfo 是在res/xml 的文件形式存在的,看參數(shù)不難理解,比較重要的是這里android:initialLayout="@layout/main" 此句為指定桌面組件的布局文件。

          2、寫一個(gè)類繼承自AppWidgetProvider

          主要代碼如下:
          1. public class widgetProvider extends AppWidgetProvider
          復(fù)制代碼
          并重寫兩個(gè)方法
          1. @Override
          2.     public void onUpdate(Context context, AppWidgetManager appWidgetManager,
          3.             int[] appWidgetIds) {}

          4. @Override
          5.     public void onReceive(Context context, Intent intent) {}
          復(fù)制代碼
          Tip:onUpdate 為組件在桌面上生成時(shí)調(diào)用,并更新組件UI,onReceiver 為接收廣播時(shí)調(diào)用更新UI,一般這兩個(gè)方法是比較常用的。

          3、后臺注冊Receiver

          后臺配置文件代碼如下:
          1. <receiver android:name=".widgetProvider">
          2.             <meta-data android:name="android.appwidget.provider"
          3.                 android:resource="@xml/appwidget_provider"></meta-data>
          4.             <intent-filter>
          5.                 <action android:name="com.terry.action.widget.click"></action>
          6.                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
          7.                  
          8.             </intent-filter>
          9.         </receiver>
          復(fù)制代碼
          Tip:因?yàn)槭亲烂娼M件,所以暫時(shí)不考慮使用Activity 界面,當(dāng)然你在實(shí)現(xiàn)做項(xiàng)目時(shí)可能會需要點(diǎn)擊時(shí)跳轉(zhuǎn)到Activity 應(yīng)用程序上做操作,典型的案例為Android  提供的音樂播放器。上面代碼中比較重要的是這一句 <meta-data android:name="android.appwidget.provider"  android:resource="@xml/appwidget_provider"></meta-data>  大意為指定桌面應(yīng)用程序的AppWidgetProvderInfo  文件,使其可作其管理文件。

          4、使 AppWidget 組件支持點(diǎn)擊事件

          先看代碼:
          1. public static void updateAppWidget(Context context,
          2.             AppWidgetManager appWidgeManger, int appWidgetId) {
          3.         rv = new RemoteViews(context.getPackageName(), R.layout.main);
          4.         Intent intentClick = new Intent(CLICK_NAME_ACTION);
          5.         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
          6.                 intentClick, 0);
          7.         rv.setOnClickPendingIntent(R.id.TextView01, pendingIntent);
          8.         appWidgeManger.updateAppWidget(appWidgetId, rv);
          9.     }
          復(fù)制代碼
          此方法為創(chuàng)建組件時(shí) onUpdate 調(diào)用的更新UI的方法,代碼中使用RemoteView 找到組件的布局文件,同時(shí)為其設(shè)置廣播接收器CLICK_NAME_ACTION并且通過RemoteView 的setOnClickPendingIntent 方法找到我想觸發(fā)事件的TextView 為其設(shè)置廣播。接著
          1. @Override
          2.     public void onReceive(Context context, Intent intent) {
          3.         // TODO Auto-generated method stub
          4.         super.onReceive(context, intent);

          5.         if (rv == null) {
          6.             rv = new RemoteViews(context.getPackageName(), R.layout.main);
          7.         }
          8.         if (intent.getAction().equals(CLICK_NAME_ACTION)) {
          9.             if (uitil.isChange) {
          10.                 rv.setTextViewText(R.id.TextView01, context.getResources()
          11.                         .getString(R.string.load));

          12.             } else {
          13.                 rv.setTextViewText(R.id.TextView01, context.getResources()
          14.                         .getString(R.string.change));

          15.             }
          16.             Toast.makeText(context, Boolean.toString(uitil.isChange),
          17.                     Toast.LENGTH_LONG).show();
          18.             uitil.isChange = !uitil.isChange;

          19.         }
          20.         AppWidgetManager appWidgetManger = AppWidgetManager
          21.                 .getInstance(context);
          22.         int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(
          23.                 context, widgetProvider.class));
          24.         appWidgetManger.updateAppWidget(appIds, rv);
          25.     }
          復(fù)制代碼
          在onReceiver 中通過判斷傳進(jìn)來的廣播來觸發(fā)動(dòng)作。

          5、如何使TextView 在兩種文本間來回跳轉(zhuǎn)

          如何 TextView 在來兩種狀態(tài)中來回呢?這也是我比較調(diào)試最久的一個(gè)難點(diǎn),問題出在對 AppWidget 的理解不夠深入。 如果我的設(shè)想沒錯(cuò)的話AppWidget 的生命周期應(yīng)該在每接收一次廣播執(zhí)行一次為一個(gè)生命周期結(jié)束,也就是說你在重寫的 AppWidgetProvider 類里面聲明全局變量做狀態(tài)判斷,每次狀態(tài)改變AppWidgetProvider 再接收第二次廣播時(shí)即為你重新初始化也就是說桌件為你重新實(shí)例化了一次AppWidgetProvider 。今天我因?yàn)樵诶锩娣帕艘粋€(gè)boolean 值初始化為true ,觀察調(diào)試看到每次進(jìn)入都為TRUE 故你在設(shè)置桌面組件時(shí),全局變量把它聲明在另外一個(gè)實(shí)體類用來判斷是沒問題的,切忌放在本類。代碼參考o(jì)nReceiver方法。

          效果圖如下:
          fasada.png

          代碼:
          package com.terry;

          import android.app.PendingIntent;
          import android.appwidget.AppWidgetManager;
          import android.appwidget.AppWidgetProvider;
          import android.content.ComponentName;
          import android.content.Context;
          import android.content.Intent;
          import android.widget.RemoteViews;
          import android.widget.Toast;

          public class widgetProvider extends AppWidgetProvider {
              private static final String CLICK_NAME_ACTION = "com.terry.action.widget.click";

              private static RemoteViews rv;

              @Override
              public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                      int[] appWidgetIds) {
                  // TODO Auto-generated method stub
                  final int N = appWidgetIds.length;
                  for (int i = 0; i < N; i++) {
                      int appWidgetId = appWidgetIds;
                      updateAppWidget(context, appWidgetManager, appWidgetId);
                  }
              }

              @Override
              public void onReceive(Context context, Intent intent) {
                  // TODO Auto-generated method stub
                  super.onReceive(context, intent);

                  if (rv == null) {
                      rv = new RemoteViews(context.getPackageName(), R.layout.main);
                  }
                  if (intent.getAction().equals(CLICK_NAME_ACTION)) {
                      if (uitil.isChange) {
                          rv.setTextViewText(R.id.TextView01, context.getResources()
                                  .getString(R.string.load));

                      } else {
                          rv.setTextViewText(R.id.TextView01, context.getResources()
                                  .getString(R.string.change));

                      }
                      Toast.makeText(context, Boolean.toString(uitil.isChange),
                              Toast.LENGTH_LONG).show();
                      uitil.isChange = !uitil.isChange;

                  }
                  AppWidgetManager appWidgetManger = AppWidgetManager
                          .getInstance(context);
                  int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(
                          context, widgetProvider.class));
                  appWidgetManger.updateAppWidget(appIds, rv);
              }

              public static void updateAppWidget(Context context,
                      AppWidgetManager appWidgeManger, int appWidgetId) {
                  rv = new RemoteViews(context.getPackageName(), R.layout.main);
                  Intent intentClick = new Intent(CLICK_NAME_ACTION);
                  PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
                          intentClick, 0);
                  rv.setOnClickPendingIntent(R.id.TextView01, pendingIntent);
                  appWidgeManger.updateAppWidget(appWidgetId, rv);
              }
          }
          widget.rar (42.55 KB, 下載次數(shù): 42)
          posted @ 2012-04-07 21:48 Eric_jiang 閱讀(363) | 評論 (0)編輯 收藏

          想必用過大機(jī)的人都接觸過Block, Track, Cylinder的概念。Mainframe的存儲管理一般就是基于這幾個(gè)單位。

          那么,Mainframe上1個(gè)Cylinder是多少個(gè)Track?1個(gè)Track是多少個(gè)KB?1個(gè)Track包含多少個(gè)Block?

           

          對于第一個(gè)問題,多數(shù)人都知道答案是15,基于一般的磁盤設(shè)備,15這個(gè)答案沒有錯(cuò),但是對于磁帶,應(yīng)該是沒有柱面這個(gè)概念的。(這個(gè)有待探討,畢竟大家真用過磁帶的不多,而做備份是不需要手動(dòng)分配存儲的)

           

          第二個(gè)問題,1個(gè)Track是多少個(gè)KB?

          經(jīng)過查閱相關(guān)IBM官方文檔,可以得知,不同類型的設(shè)備,1個(gè)Track包含的KB數(shù)不等。

          對于最常見的3390設(shè)備,1 Track = 56,664 Bytes;對于3380設(shè)備,1 Track = 47,476Bytes。

          (參考文獻(xiàn):IBM System Storage DS8000 Information Center,章節(jié)LUN calculation)

           

          第三個(gè)問題,1個(gè)Track包含多少個(gè)Block?

          首先,Block的大小是自定義的,能夠定義的最大的Block Size是32760(bytes)。如果定義一個(gè)Block為32760 bytes,那么無論對于3390還是3380,一個(gè)Track只能包含1個(gè)block。無疑這是很大的浪費(fèi),因?yàn)檫@個(gè)track上剩下的Bytes是無法取用的。(1個(gè)Track只能隸屬于1個(gè)文件,而且block不可以span track)

          所以,空間最優(yōu)化的block size方案是1個(gè)track放2個(gè)block。因?yàn)閎lock之間有inter block gap,1個(gè)track上剩下的可用byte數(shù)為55,996個(gè),所以,最優(yōu)的block size數(shù)值為最接近但不超過27,998的那個(gè)record size的整數(shù)倍的數(shù)值。

          posted @ 2012-03-31 17:47 Eric_jiang 閱讀(454) | 評論 (0)編輯 收藏

          數(shù)據(jù)集的創(chuàng)建:

          數(shù)據(jù)集的創(chuàng)建有兩種情況:1分區(qū)數(shù)據(jù)集的創(chuàng)建,2連續(xù)數(shù)據(jù)集的創(chuàng)建。

           分區(qū)數(shù)據(jù)集的創(chuàng)建步驟如下:在ISPF主菜單下選擇3-Utilitis,然后是2-Data Set,在面板最上面就會看到有8種操作可以進(jìn)行,在選項(xiàng)區(qū)域輸入字母 A,但是不要按 ENTER 鍵,然后在數(shù)據(jù)集名字區(qū)域中輸入新數(shù)據(jù)集的名字,但是同樣也不要按ENTER 鍵。名字可以用單引號引起來(例如,’yourid.LIB.SOURCE)或不用引號引起來(LIB.SOURCE)以便TSO/ISPF 能夠自動(dòng)的把當(dāng)前的 TSO用戶ID 作為HLQ 使用。然后在卷序號區(qū)域輸入 WORK02,按ENTER鍵。 完成指定的參數(shù)設(shè)置并且按 ENTER。 

           – Space Units = TRKS           (這是一個(gè)為后面數(shù)據(jù)設(shè)置的單位,意為磁道)

           – Primary quantity = 10         (為數(shù)據(jù)集分配 10 個(gè)磁道的主空間)

           – Secondary quantity = 5      5個(gè)磁道的追加空間)

           – Directory blocks = 10         10個(gè)目錄空間足夠了)

           – Record format = FB         (數(shù)據(jù)集的記錄格式是 FB

           – Record length = 80          (邏輯記錄的長度是 80 字節(jié))

           – Block size = 0                   (this tells z/OS to select an optimum value) (在Record formatFB的情況下,這個(gè)區(qū)域如果要自定義的話一定要是上一個(gè)參數(shù)Record length的整數(shù)倍,至于原因,可以從上一篇文章中找)

           – Data set type = PDS         PDS代表分區(qū)數(shù)據(jù)集,HFS代表分級文件系統(tǒng),是Z/OS UNIX文件系統(tǒng),LIBRARY表示庫,BLANK表示什么不知道)

          系統(tǒng)執(zhí)行創(chuàng)建數(shù)據(jù)集的操作完畢以后,在屏幕的右上的角落,可以看到成功或者失敗的 消息。

          順序數(shù)據(jù)集的創(chuàng)建與分區(qū)數(shù)據(jù)集的創(chuàng)建的不同之處在于填寫參數(shù)的時(shí)候要在Directory blocks 項(xiàng)填0,因?yàn)轫樞驍?shù)據(jù)集中根本不需要目錄,分配空間又要何用。然后還要把Data set type 保持為空,即BLANK,這樣子創(chuàng)建出來的一個(gè)DATA SET就是一個(gè)順序數(shù)據(jù)集。同樣你會在右上角看到創(chuàng)建成功與否的提示信息。

          數(shù)據(jù)集的列表總覽:

          我剛才學(xué)會了創(chuàng)建數(shù)據(jù)集,那么我如何去看我們的數(shù)據(jù)集在哪呢?其實(shí)我已經(jīng)知道它就在創(chuàng)建數(shù)據(jù)集時(shí)指定的那個(gè)VOLUME中,但是,我還是想看一看VOLUME下倒底有哪些數(shù)據(jù)數(shù)據(jù)集呢?原來可以在ISPF下使用3.4即Dlist選項(xiàng),在其中的Dsname level右邊填上你的用戶名,或者就是你的HLQ,然后回車,就可以得到一個(gè)數(shù)據(jù)集的列表,或者你不填寫Dsname level,而是填寫了下面那個(gè)Volume serial,那么得到的就是這個(gè)卷中的所有的數(shù)據(jù)集的列表,如下面這個(gè)圖所示:

          在這個(gè)界面中,用PF10PF11左右翻動(dòng)可以顯示更多的信息,這種情況并不是真正的滾動(dòng);只有當(dāng)使用PF11 PF10 時(shí)才能獲得額外的信息。 第一個(gè) PF11 顯示的內(nèi)容包括磁道、使用百分比、分區(qū)和設(shè)備類型。分區(qū)值是用于獲得顯示磁道總數(shù)的分區(qū)數(shù)量。ISPF 實(shí)用程序可以看到數(shù)據(jù)集實(shí)際使用的空間的大小,且如果可能的話,它還可以作為一個(gè)百分比來顯示。第二個(gè) PF11 顯示的內(nèi)容包括 DCB 特性:數(shù)據(jù)集組織形式(DSORG)、數(shù)據(jù)集記錄格式(RECFM)、邏輯記錄長度(LRECL)和組塊的長度(BLKSIZE)。PS 代表順序數(shù)據(jù)集,PO 代表分區(qū)數(shù)據(jù)集,VS 代表 VSAM 數(shù)據(jù)集,BLANK 代表未知組織或者不存在數(shù)據(jù)集。 

          RECFMLRECL BLKSIZE 應(yīng)該是比較熟悉的。在某些情況下,若沒有使用一個(gè)標(biāo)準(zhǔn)的訪問方法或沒有寫入數(shù)據(jù)時(shí),這些參數(shù)是不能確定的。VSAM 數(shù)據(jù)集沒有這些參數(shù)的直接數(shù)值,通常是以問號來表示。

          在這個(gè)界面下按F1可以查看到可以對數(shù)據(jù)集進(jìn)行的一些操作的命令,如S ,E B等等,這時(shí)在某一個(gè)要編輯的數(shù)據(jù)集左側(cè),對應(yīng)于上方藍(lán)色的Command列下面輸入命令,然后回車就可以執(zhí)行命令了。比如用E,就馬上進(jìn)入該數(shù)據(jù)集的編輯狀態(tài)。

          數(shù)據(jù)集的編輯:

          如果是一個(gè)連續(xù)數(shù)據(jù)集,我們可以直接在ISPF主菜單的2選項(xiàng)EDIT里面,輸入數(shù)據(jù)集名稱,直接進(jìn)行編輯狀態(tài),在編輯環(huán)境下,有兩種命令格式,一種是主命令,就是在Command那一行輸入來使用的命令,它們常見的有:

          AUTOSAVE ON/OFF,打開關(guān)閉自動(dòng)保存

          AUTONUM ON/OFF,自動(dòng)重新編號行號(SAVE后生效)

          CANCLE:取消所做的編輯并退出編輯環(huán)境
          CAPS ON/OFF:退出編輯環(huán)境后系統(tǒng)自動(dòng)將所有字母轉(zhuǎn)換為大寫/小寫
          CHANGERCHANGE):替換字符,RCHANGE表示重復(fù)上次的替換。格式:CHANGE ** ** [ALL]
          FINDRFIND):查找字符串
          RECOVERY ON/OFF:設(shè)置編輯方式,ON表示用戶可以通過UNDO命令取消上一次編輯操作
          RESET:重置編輯器,清除不需要的信息
          SAVE:保存當(dāng)前修改,并繼續(xù)編輯
          SORT:對文檔行按字典順序排序
          SUBMIT:提交作業(yè);若作業(yè)是一段JCL程序,則通過該命令可以提交作業(yè)程序
          UNDO:取消上一次編輯(僅當(dāng)在RECOVERY ON編輯方式下)
          ssetup+member:創(chuàng)建新成員(PDS
          CUT:復(fù)制當(dāng)前內(nèi)容(配合CCMM來使用)
          PASTE:粘貼當(dāng)前內(nèi)容(配合CUT來用 很常用)
          COPY+member-name:復(fù)制同一DATASETMEMBER內(nèi)容(配合AB使用)

          HEX ON/OFF,打開關(guān)閉十六進(jìn)制編碼形式;
          HI+XXX:高亮顯示某種語言(JCL COBOL REXX等等)
          MEMBER+member-name:查詢當(dāng)前所有DATASET下該member是否存在(非常實(shí)用)
          PROFILE:列出當(dāng)前編輯環(huán)境的所有的editor profile
          HEX ON/OFF:打開關(guān)閉十六進(jìn)制編碼形式
          AUTOSAVE ON/OFF:打開關(guān)閉自動(dòng)保存
          AUTONUM ON/OFF:自動(dòng)重新編號行號(SAVE后生效)

          PROFILE, 列出當(dāng)前編輯環(huán)境的所有的editor profile
          PROFILE UNLOCK/LOCK:可以修改ISPFeditor profile
          PACK ON/OFF:是否將該MEMBER保存成PACK格式(一種主機(jī)上標(biāo)準(zhǔn)的壓縮格式)
          TABS ON/OFF:編輯的時(shí)候是否允許用TAB鍵跳格

          如果是編輯REXXCOBOL,JCL等,可以用 HI REXX, HI COBOL HI JCL,讓語言的關(guān)鍵字高亮顯示。這個(gè)對閱讀程序幫助很大

          命令 COPY member1 就會把 member1 的內(nèi)容拷貝到當(dāng)前的文件中。

          命令 CUT 可以把當(dāng)前文件的內(nèi)容拷貝到剪貼板中,然后到你要你要粘入的文件,使用PASTE 命令 拷貝到該文件。

          CTRL+HOME顯示隱藏十字光標(biāo)(十字光標(biāo)是干什么滴?)

          另一種命令是行命令,是輸入在文本行中的左側(cè)EDIT下面列來使用的命令,常見的行命令如下:

          C、CC、Cxx:拷貝命令。與其他行命令(AB)或主命令 結(jié)合使用 C 拷貝當(dāng)前行,CC拷貝多行,用兩個(gè)CC來定位,Cxx拷貝多行,XX表示行數(shù)
          IIXX:插入命令。執(zhí)行一次插入命令后,可直接按回車(ctrl)換行
          D、DD、Dxx:刪除
          R、RR、Rxx:復(fù)制
          O:覆蓋當(dāng)前內(nèi)容(結(jié)合CR來用)
          A:定位于當(dāng)前行之前
          B:定位于當(dāng)前行之后
          XXXXxx:隱藏
          SSxx:顯示隱藏的內(nèi)容
          COLS:屏幕的刻度標(biāo)尺
          UCUCxx:轉(zhuǎn)換成大寫
          LC、LCxx:轉(zhuǎn)換成小寫
          (, (xx:將當(dāng)前行左移一列或xx(或者<)
          ), )xx :將當(dāng)前行右移一列或xx(或者>)
          TS:將一行文本切分為兩行
          TF:將多行文本合并為一行

          行命令還有O,配合AB一起使用能夠覆蓋指定的行相同位置

          還有列于最下行的功能鍵都有提示,就不說了。

          編輯完了F3可保存退出。F12不保存退出。

          如果數(shù)據(jù)集是一個(gè)分區(qū)數(shù)據(jù)集,如果是一個(gè)剛剛建立的分區(qū)數(shù)據(jù)集,我們按前述進(jìn)行編輯的時(shí)候,右上角會提示 No member in data set,這個(gè)就是說明了,一個(gè)分區(qū)數(shù)據(jù)集是不能拿來直接編輯的,因?yàn)樗且粋€(gè)順序數(shù)據(jù)集的集合,它相當(dāng)于一個(gè)文件夾,怎么可以拿來直接編輯呢,所以要先在其中建立順序數(shù)據(jù)集,這個(gè)順序數(shù)據(jù)集一般被稱為MEMBER,然后再對MEMBER進(jìn)行相應(yīng)的編輯。如何給分區(qū)數(shù)據(jù)集添加順序數(shù)據(jù)集呢?很簡單,就在如上的兩處環(huán)境下在Data set name一項(xiàng)中填上數(shù)據(jù)集名稱,然后在后面加上一個(gè)括號,其中寫上要添加的成員的名字就可以了(例如LIB.COURCE(MEM1)),然后回車就直接進(jìn)入編輯狀態(tài)了。如果是一個(gè)已經(jīng)有成員的分區(qū)數(shù)據(jù)集,填寫好數(shù)據(jù)集名稱,不用加什么括號然后直接回車,會出現(xiàn)一個(gè)成員列表,再在其中進(jìn)行選擇,然后選擇一個(gè)數(shù)據(jù)集來編輯就可以了,編輯命令當(dāng)然跟前面說過的那兩種命令相同了。

          數(shù)據(jù)集的刪除:

          數(shù)據(jù)集的刪除可以在3.2下面用D命令進(jìn)行,也可以在3.4下面用D命令進(jìn)行。這個(gè)比較簡單。

          數(shù)據(jù)集的重命名:

          數(shù)據(jù)集的重命名跟刪除一樣,可以在3.2下面用R命令進(jìn)行,也可以在3.4下面用R命令進(jìn)行。這個(gè)也比較簡單。

          數(shù)據(jù)集的移動(dòng)和拷貝:

          假定用戶需要復(fù)制位于卷WORK02中的數(shù)據(jù)集 ZPROF.ZSCHOLAR.LIB.SOURCE,操作過程如下: 

          1. 選擇ISPF選項(xiàng)3.3(實(shí)用程序移動(dòng)/復(fù)制)。 

          2. 在第一個(gè)面板上: 

              在選項(xiàng)區(qū)域輸入C。 

              在數(shù)據(jù)集名字區(qū)域輸入’ZPROF.ZSCHOLAR.LIB.SOURCE’。這種情況需要用到單引號。 

          3.在第二個(gè)面板上: 

              在數(shù)據(jù)集名字區(qū)域中輸入’yourid.LIB.SOURCE’并且按ENTER ,如果這個(gè)目標(biāo)數(shù)據(jù)集不存在,會有一個(gè)創(chuàng)建新數(shù)據(jù)集的提示。

          4. 操作后應(yīng)該產(chǎn)生一個(gè)面板列出輸入數(shù)據(jù)集中的所有成員: 

               -在每個(gè)成員名字前輸入S,并且按ENTER鍵。 如果源數(shù)據(jù)集中本身就沒有成員,那么復(fù)制將自然會失敗。

          這樣就把所有顯示出來的成員從源數(shù)據(jù)集復(fù)制到了目標(biāo)數(shù)據(jù)集。

          移動(dòng)的做法跟復(fù)制差不多,只是移動(dòng)過后源數(shù)據(jù)集就消失了,而復(fù)制不會消失。

          數(shù)據(jù)集的編目:

          先對數(shù)據(jù)集的編目進(jìn)行一個(gè)概覽:

          MVS中,數(shù)據(jù)集的管理主要是通過目錄(CATALOG)來實(shí)現(xiàn)的。目錄本身是一個(gè)數(shù)據(jù)集,它含有其它數(shù)據(jù)集的信息,提供一種能力,按數(shù)據(jù)集名去定位數(shù)據(jù)集的地址。MVS中最初沒有目錄,因此用戶必須牢牢記住其數(shù)據(jù)集所在的卷,在訪問數(shù)據(jù)集時(shí),除了要指定數(shù)據(jù)集的名字外,還要指定數(shù)據(jù)集所在的卷。由于系統(tǒng)中的卷的個(gè)數(shù)非常多,用戶使用很不方便。之后,隨著操作系統(tǒng)的發(fā)展,實(shí)現(xiàn)了CVOL目錄和VSAM目錄?,F(xiàn)在使用的目錄是Integrated catalog
                   這三種目錄可以并存于同一個(gè)操作系統(tǒng)中,其中前兩種只是因?yàn)榭紤]兼容性而存在,系統(tǒng)中如果沒有早期的應(yīng)用需求,可以完全不使用前兩種目錄 形式。

           對數(shù)據(jù)集的編目實(shí)際上是對數(shù)據(jù)集的入口建立表格和索引。訪問數(shù)據(jù)集時(shí),系統(tǒng)通過查找目錄來定位已編目的數(shù)據(jù)集。目錄中包括數(shù)據(jù)集名,卷標(biāo)(VOLUME)和設(shè)備類型(UNIT)。
          當(dāng)讀取編目的數(shù)據(jù)集時(shí),只需指定數(shù)據(jù)集名和數(shù)據(jù)集狀態(tài),無需指定VOLUMEUNIT參數(shù),這時(shí),系統(tǒng)通過數(shù)據(jù)集名(DSN)查找編目,從編目中獲取UNIT VOLUME信息,然后再通過UNIT參數(shù)和VOLUME參數(shù)指定的VTOC獲取數(shù)據(jù)集位置,大小等信息。

           使用編目后,用戶不再需要知道外存儲器的詳細(xì)設(shè)置,因此數(shù)據(jù)可以從一個(gè)地方移動(dòng)到另一個(gè)地方而不必改變JCL中的DD語句,訪問數(shù)據(jù)集時(shí)也不必知道數(shù)據(jù)集存放的卷。使用編目同時(shí)也簡化了數(shù)據(jù)集的備份和恢復(fù)過程。所有VSAM數(shù)據(jù)集和SMS管理的數(shù)據(jù)集均需要編目。

          如果你使用了SMS,或者為編目定義了別名(alias),則在JCL中不應(yīng)該再使用JOBCATSTEPCAT語句去指定catalog。

             一個(gè)編目機(jī)制包含兩種獨(dú)立的數(shù)據(jù)集:一個(gè)基本的編目結(jié)構(gòu)(BCS)和一個(gè)VSAM卷數(shù)據(jù)集(VVDS)。BCS可以認(rèn)為是編目,而VVDS則可認(rèn)為是VTOC的擴(kuò)展。

             BCS是一個(gè)VSAM KSDS數(shù)據(jù)集,它使用數(shù)據(jù)集的名字作為關(guān)鍵字。對于VSAM數(shù)據(jù)集,BCS含有卷、安全信息、擁有者及其它信息。對于非 VSAM數(shù)據(jù)集, BCS含有卷,擁有者及其它信息。

           VVDS是一個(gè)VSAM ESDS數(shù)據(jù)集,其名字為:SYSIVVDSVvolser VVDS存放在每
          一個(gè)含有VSAMSMS管理的數(shù)據(jù)集的卷上。它含有數(shù)據(jù)集的特性和擴(kuò)展(extention)信息。
          對于VSAM數(shù)據(jù)集來說,還含有卷的有關(guān)信息。因此,編目的數(shù)據(jù)集描述信息包含在VTOC,BCSVVDS中,三者描述的信息應(yīng)當(dāng)一致。這種一致性由操作系統(tǒng)自動(dòng)同步。

           所有SMS管理的數(shù)據(jù)集在VVDS中都有登記項(xiàng),對于VSAM數(shù)據(jù)集的VVDS記錄被稱之為VVRVSAM Volume Record),而對于SMS管理的非VSAM數(shù)據(jù)集的VVDS記錄則被稱之為NVRNon-VSAM Volume Record)。如果一個(gè)非VSAM數(shù)據(jù)集跨多個(gè)卷,則其NVR在第一個(gè)卷上。

          由于BCS同樣也是一個(gè)VSAM,它在 VVDS中也有一個(gè)VVR。臨時(shí)的 VSAM數(shù)據(jù)集在VVDS中同樣也有登記項(xiàng),但在BCS中沒有登記項(xiàng)。

            MVS系統(tǒng)中,有一個(gè)主目錄(Master Catalog)及多個(gè)用戶目錄(User Catalog)。
          主目錄是整個(gè)外存系統(tǒng)管理的中心控制點(diǎn),它描述系統(tǒng)的數(shù)據(jù)集和用戶目錄,而用戶目錄則描述用戶的數(shù)據(jù)集。通常稱在目錄中有描述信息的數(shù)據(jù)集為編目的數(shù)據(jù)集。顯然,主目錄的信息非常重要,因此可以有一個(gè)或多個(gè)主目錄的備份。但任何時(shí)候系統(tǒng)中只能有一個(gè)主目錄在使用,形成一個(gè)以主目錄為中心的兩級層次式的數(shù)據(jù)集管理方式,主目錄與用戶目錄的區(qū)別僅僅在于它使用的方式。

           SYSINUCLEUS數(shù)據(jù)集的SYSCATXX成員(如果有的話)或SYSIPARMLIB(SYS1.IPLPARM)數(shù)據(jù)集的LOADXX成員指向主目錄。在系統(tǒng)啟動(dòng)時(shí),操作員也可指定使用另一個(gè)主目錄。所有的用戶目錄均登記在主目錄中。

          posted @ 2012-03-31 15:59 Eric_jiang 閱讀(2357) | 評論 (0)編輯 收藏

          刷機(jī)前的準(zhǔn)備:

          (1)請開啟調(diào)試功能,設(shè)置--應(yīng)用程序--開發(fā)---USB調(diào)試 打鉤

          (2)請把signed-IT_radio.zip(基帶)和 ROM (刷機(jī)包) 放到sd卡根目錄,這里將會用  v大的2.3ROM示范
          (3)安裝moto驅(qū)動(dòng)(刷機(jī)工具包中已帶),最好重啟下,這里安裝驅(qū)動(dòng)了刷機(jī)第一步  安裝驅(qū)動(dòng)跳過
          (4)插入數(shù)據(jù)線后,手機(jī)會彈出 USB存儲設(shè)備或僅充電,不要選擇。
          一、一步刷入recovery(1.5第一步開始,2.1以上直接看第三步)
          先下載好ME600刷機(jī)工具,解壓到桌面,運(yùn)行開始智能破解.bat,看提示即可,第一步完成后手機(jī)會自動(dòng)進(jìn)入recovery的機(jī)器人界面  注:裝驅(qū)動(dòng)那步和最后不要忘記按任意鍵
          如果執(zhí)行命令的時(shí)候卡住了請關(guān)閉cmd窗口然后點(diǎn)亮手機(jī)屏幕重新開始  

          二、刷基帶(ATT請?zhí)^此步,切記)
          recovery下的操作方法:音量鍵選擇,小房子確定,返回鍵返回

          三、wipe all(清除數(shù)據(jù))

          對于買回來就是2.1以上的機(jī)友,或者以后想換其他2.1 2.2 2.3的包就從這里開始,這就就是所謂的平刷,手動(dòng)進(jìn)入recovery的方法是手機(jī)重啟白屏的時(shí)候按住相機(jī)鍵,出現(xiàn)綠字了再按一下音量下鍵


          四、刷包
          刷包成功之后選擇第一個(gè)reboot system now,手機(jī)會自動(dòng)重啟進(jìn)入桌面,第一次進(jìn)入桌面有點(diǎn)慢,五到十分鐘左右 文章出處:安卓庫
           
           
          ME600刷機(jī)工具:http://u.115.com/file/clgm71ol

          posted @ 2012-03-26 09:24 Eric_jiang 閱讀(6455) | 評論 (0)編輯 收藏

          Activities提供了一種方便管理的創(chuàng)建、保存、回復(fù)的對話框機(jī)制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,如果使用這些方法的話,Activity將通過getOwnerActivity()方法返回該Activity管理的對話框(dialog).

           

            onCreateDialog(int):當(dāng)你使用這個(gè)回調(diào)函數(shù)時(shí),Android系統(tǒng)會有效的設(shè)置這個(gè)Activity為每個(gè)對話框的所有者,從而自動(dòng)管理每個(gè)對話框的狀態(tài)并掛靠到Activity上。這樣,每個(gè)對話框繼承這個(gè)Activity的特定屬性。比如,當(dāng)一個(gè)對話框打開時(shí),菜單鍵顯示為這個(gè)Activity定義的選項(xiàng)菜單,音量鍵修改Activity使用的音頻流。

           

            showDialog(int): 當(dāng)你想要顯示一個(gè)對話框時(shí),調(diào)用showDialog(int id) 方法并傳遞一個(gè)唯一標(biāo)識這個(gè)對話框的整數(shù)。當(dāng)對話框第一次被請求時(shí),Android從你的Activity中調(diào)用onCreateDialog(int id),你應(yīng)該在這里初始化這個(gè)對話框Dialog。這個(gè)回調(diào)方法被傳以和showDialog(int id)相同的ID。當(dāng)你創(chuàng)建這個(gè)對話框后,在Activity的最后返回這個(gè)對象。

           

            onPrepareDialog(int, Dialog):在對話框被顯示之前,Android還調(diào)用了可選的回調(diào)函數(shù)onPrepareDialog(int id, Dialog). 如果你想在每一次對話框被打開時(shí)改變它的任何屬性,你可以定義這個(gè)方法。這個(gè)方法在每次打開對話框時(shí)被調(diào)用,而onCreateDialog(int) 僅在對話框第一次打開時(shí)被調(diào)用。如果你不定義onPrepareDialog(),那么這個(gè)對話框?qū)⒈3趾蜕洗未蜷_時(shí)一樣。這個(gè)方法也被傳遞以對話框的ID,和在onCreateDialog()中創(chuàng)建的對話框?qū)ο蟆?/code>

           

            dismissDialog(int):當(dāng)你準(zhǔn)備關(guān)閉對話框時(shí),你可以通過對這個(gè)對話框調(diào)用dismiss()來消除它。如果需要,你還可以從這個(gè)Activity中調(diào)用dismissDialog(int id) 方法,這實(shí)際上將為你對這個(gè)對話框調(diào)用dismiss() 方法。 如果你想使用onCreateDialog(int id) 方法來管理你對話框的狀態(tài)(就如同在前面的章節(jié)討論的那樣),然后每次你的對話框消除的時(shí)候,這個(gè)對話框?qū)ο蟮臓顟B(tài)將由該Activity保留。如果你決定不再需要這個(gè)對象或者清除該狀態(tài)是重要的,那么你應(yīng)該調(diào)用removeDialog(int id)。這將刪除任何內(nèi)部對象引用而且如果這個(gè)對話框正在顯示,它將被消除。

           

          下面是幾種對話框的效果

          圖1

          圖2

          圖3

          圖4

          圖5

          圖6

          圖7

            圖1效果:該效果是當(dāng)按返回按鈕時(shí)彈出一個(gè)提示,來確保無誤操作,采用常見的對話框樣式。

               代碼:

            創(chuàng)建對話框方法dialog()

          protected void dialog() {
            AlertDialog.Builder builder = new Builder(Main.this);
            builder.setMessage("確認(rèn)退出嗎?");

            builder.setTitle("提示");

            builder.setPositiveButton("確認(rèn)", new OnClickListener() {

             @Override
             public void onClick(DialogInterface dialog, int which) {
              dialog.dismiss();

              Main.this.finish();
             }
            });

            builder.setNegativeButton("取消", new OnClickListener() {

             @Override
             public void onClick(DialogInterface dialog, int which) {
              dialog.dismiss();
             }
            });

            builder.create().show();
           }

           

          在onKeyDown(int keyCode, KeyEvent event)方法中調(diào)用此方法

          public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
             dialog();
            }
            return false;
           }

            圖2效果:改變了對話框的圖表,添加了三個(gè)按鈕

          Dialog dialog = new AlertDialog.Builder(this).setIcon(
               android.R.drawable.btn_star).setTitle("喜好調(diào)查").setMessage(
               "你喜歡李連杰的電影嗎?").setPositiveButton("很喜歡",
               new OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                 // TODO Auto-generated method stub
                 Toast.makeText(Main.this, "我很喜歡他的電影。",
                   Toast.LENGTH_LONG).show();
                }
               }).setNegativeButton("不喜歡", new OnClickListener() {

              @Override
              public void onClick(DialogInterface dialog, int which) {
               // TODO Auto-generated method stub
               Toast.makeText(Main.this, "我不喜歡他的電影。", Toast.LENGTH_LONG)
                 .show();
              }
             }).setNeutralButton("一般", new OnClickListener() {

              @Override
              public void onClick(DialogInterface dialog, int which) {
               // TODO Auto-generated method stub
               Toast.makeText(Main.this, "談不上喜歡不喜歡。", Toast.LENGTH_LONG)
                 .show();
              }
             }).create();

             dialog.show();

           

          圖3效果:信息內(nèi)容是一個(gè)簡單的View類型

          new AlertDialog.Builder(this).setTitle("請輸入").setIcon(
               android.R.drawable.ic_dialog_info).setView(
               new EditText(this)).setPositiveButton("確定", null)
               .setNegativeButton("取消", null).show();

           

          圖4效果:信息內(nèi)容是一組單選框

          new AlertDialog.Builder(this).setTitle("復(fù)選框").setMultiChoiceItems(
               new String[] { "Item1", "Item2" }, null, null)
               .setPositiveButton("確定", null)
               .setNegativeButton("取消", null).show();

           

          圖5效果:信息內(nèi)容是一組多選框

          new AlertDialog.Builder(this).setTitle("單選框").setIcon(
               android.R.drawable.ic_dialog_info).setSingleChoiceItems(
               new String[] { "Item1", "Item2" }, 0,
               new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                 dialog.dismiss();
                }
               }).setNegativeButton("取消", null).show();

           

          圖6效果:信息內(nèi)容是一組簡單列表項(xiàng)

          new AlertDialog.Builder(this).setTitle("列表框").setItems(
               new String[] { "Item1", "Item2" }, null).setNegativeButton(
               "確定", null).show();

           

          圖7效果:信息內(nèi)容是一個(gè)自定義的布局

          1.布局文件

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="
           android:layout_height="wrap_content" android:layout_width="wrap_content"
           android:background="#ffffffff" android:orientation="horizontal"
           android:id="@+id/dialog">
           <TextView android:layout_height="wrap_content"
             android:layout_width="wrap_content"
            android:id="@+id/tvname" android:text="姓名:" />
           <EditText android:layout_height="wrap_content"
            android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth="100dip"/>

          </LinearLayout>

          2.調(diào)用代碼

          LayoutInflater inflater = getLayoutInflater();
             View layout = inflater.inflate(R.layout.dialog,
               (ViewGroup) findViewById(R.id.dialog));

             new AlertDialog.Builder(this).setTitle("自定義布局").setView(layout)
               .setPositiveButton("確定", null)
               .setNegativeButton("取消", null).show();

          posted @ 2012-03-12 16:32 Eric_jiang 閱讀(432) | 評論 (0)編輯 收藏

          在非主Activity中點(diǎn)擊下載按鈕時(shí),新建一個(gè)線程來下載文件。同時(shí)要在非主Activity中定義一個(gè)Handler來刷新下載進(jìn)度。如果界面切到了主Activity界面,當(dāng)文件下載完成后,非主Activity中的Handler仍會獲得信息并處理。我選擇在這時(shí)發(fā)送一個(gè)廣播:

            

          Handler handler 
          = new Handler() {
                  @Override
                  
          public void handleMessage(Message msg) {
                      
          if (msg.what == 1) {
                       
          int index= msg.getData().getInt("index");
                    
          if(index!=0){
                     
          //顯示進(jìn)度
                    }
                    
          if(index>=100){
                           
          if(當(dāng)前是非主Activity){
                            
          //隱藏進(jìn)度,彈出下載完成提示
                           }else{
                
          //給主Activity發(fā)送一個(gè)廣播
                            Intent intent = new Intent("android.intent.action.MAIN");
                   sendBroadcast(intent);
               }
                    }
                      }
                  }
          }; 



           同時(shí),在主Activity中定義一個(gè)廣播接收器,并處理


          BroadcastReceiver mReceiver
          =new BroadcastReceiver(){
           
          public void onReceive(Context context, Intent intent) {
            
          //刷新主Activity界面
            init();
           }
          };
          IntentFilter intentFilter 
          = new IntentFilter("android.intent.action.MAIN");
          registerReceiver(mReceiver, intentFilter);  
           


           
          這樣就實(shí)現(xiàn)我想要的功能。

          posted @ 2012-03-08 17:30 Eric_jiang 閱讀(3176) | 評論 (1)編輯 收藏

               摘要:   Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="htt...  閱讀全文
          posted @ 2012-02-29 19:16 Eric_jiang 閱讀(23259) | 評論 (2)編輯 收藏

          Intent用法實(shí)例

          1.無參數(shù)Activity跳轉(zhuǎn)

          Intent it = new Intent(Activity.Main.this, Activity2.class);
          startActivity(it);   

          2.向下一個(gè)Activity傳遞數(shù)據(jù)(使用Bundle和Intent.putExtras)

          Intent it = new Intent(Activity.Main.this, Activity2.class);
          Bundle bundle=new Bundle();
          bundle.putString("name", "This is from MainActivity!");
          it.putExtras(bundle);       // it.putExtra(“test”, "shuju”);
          startActivity(it);            // startActivityForResult(it,REQUEST_CODE);

          對于數(shù)據(jù)的獲取可以采用:

          Bundle bundle=getIntent().getExtras();
          String name=bundle.getString("name");

          3.向上一個(gè)Activity返回結(jié)果(使用setResult,針對startActivityForResult(it,REQUEST_CODE)啟動(dòng)的Activity)

                  Intent intent=getIntent();
                  Bundle bundle2=new Bundle();
                  bundle2.putString("name", "This is from ShowMsg!");
                  intent.putExtras(bundle2);
                  setResult(RESULT_OK, intent);
          4.回調(diào)上一個(gè)Activity的結(jié)果處理函數(shù)(onActivityResult)
          @Override
              protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                  // TODO Auto-generated method stub
                  super.onActivityResult(requestCode, resultCode, data);
                  if (requestCode==REQUEST_CODE){
                      if(resultCode==RESULT_CANCELED)
                            setTitle("cancle");
                      else if (resultCode==RESULT_OK) {
                           String temp=null;
                           Bundle bundle=data.getExtras();
                           if(bundle!=null)   temp=bundle.getString("name");
                           setTitle(temp);
                      }
                  }
              }

          posted @ 2012-02-29 17:29 Eric_jiang 閱讀(677) | 評論 (0)編輯 收藏

          LinearLayout有兩個(gè)非常相似的屬性:android:gravity與android:layout_gravity。他們的區(qū)別在于:android:gravity用于設(shè)置View組件的對齊方式,而android:layout_gravity用于設(shè)置Container組件的對齊方式。

          舉個(gè)例子,我們可以通過設(shè)置android:gravity="center"來讓EditText中的文字在EditText組件中居中顯示;同時(shí)我們設(shè)置EditText的android:layout_gravity="right"來讓EditText組件在LinearLayout中居中顯示。來實(shí)踐以下:


          正如我們所看到的,在EditText中,其中的文字已經(jīng)居中顯示了,而EditText組件自己也對齊到了LinearLayout的右側(cè)。

          <LinearLayout
              xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">
              <EditText
                  android:layout_width="wrap_content"
                  android:gravity="center"
                  android:layout_height="wrap_content"
                  android:text="one"
                  android:layout_gravity="right"/>
          </LinearLayout>

          posted @ 2012-02-29 17:16 Eric_jiang 閱讀(417) | 評論 (0)編輯 收藏

          package www.puyufanyi.com;

          import java.util.ArrayList;
          import java.util.HashMap;
          import java.util.List;
          import java.util.Map;

          import www.puyufanyi.com.test.Word;

          import android.app.Activity;
          import android.os.Bundle;
          import android.view.View;
          import android.widget.AdapterView;
          import android.widget.AdapterView.OnItemClickListener;
          import android.widget.ListView;
          import android.widget.SimpleAdapter;
          import android.widget.Toast;
          import android.widget.TextView;

          public class UIActivity extends Activity{

              
          private ArrayList<Word> words = new ArrayList<Word>();

              @Override
              
          public void onCreate(Bundle savedInstanceState) {
                  
          super.onCreate(savedInstanceState);
                  setContentView(R.layout.main);

                  ListView lv
          = (ListView)findViewById(R.id.wordlist);
                   
                  Word word1 
          = new Word("index1""result1");
                  Word word2 
          = new Word("index2""result2");
                  Word word3 
          = new Word("index3""result3");
                  Word word4 
          = new Word("index4""result4");
                  Word word5 
          = new Word("index5""result5");
                  
          this.words.add(word1);
                  
          this.words.add(word2);
                  
          this.words.add(word3);
                  
          this.words.add(word4);
                  
          this.words.add(word5);

                  List
          <Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();

                  
          for (int i = 0; i < words.size(); i++{
                      Map
          <String, Object> listItem = new HashMap<String, Object>();
                      listItem.put(
          "Index", words.get(i).getIndex());
                      listItem.put(
          "Result", words.get(i).getResult());
                      listItems.add(listItem);
                  }

                  SimpleAdapter simpleAdapter 
          = new SimpleAdapter(
                          
          this
                          listItems, 
                          R.layout.words,
                          
          new String[]{"Index","Result"},
                          
          new int[]{R.id.index,R.id.result}
                  );
                  lv.setAdapter(simpleAdapter);
                  lv.setOnItemClickListener(
          new OnItemClickListener() {
                      
          public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                           String  indexValue 
          = ((TextView)view.findViewById(R.id.index)).getText().toString();
                           Toast.makeText(getApplicationContext(), indexValue, Toast.LENGTH_SHORT).show();    
                      }
            
                  }
          );
                  
                       
               }

          }

          main.xml

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="    android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:orientation="vertical" >

              <!-- ListView (words) -->

              <ListView
                  android:id="@+id/wordlist"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content" >
              </ListView>

          </LinearLayout>

          words.xml

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="horizontal" >

              <TextView
                  android:id="@+id/index"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:paddingLeft="10dp" />

              <TextView
                  android:id="@+id/result"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:paddingLeft="10dp" />

          </LinearLayout>








          posted @ 2012-02-29 16:41 Eric_jiang 閱讀(298) | 評論 (1)編輯 收藏

          僅列出標(biāo)題
          共57頁: First 上一頁 31 32 33 34 35 36 37 38 39 下一頁 Last 
          主站蜘蛛池模板: 甘肃省| 龙江县| 罗江县| 凤阳县| 滦平县| 祁阳县| 江孜县| 寿宁县| 壤塘县| 鞍山市| 全椒县| 苍山县| 天全县| 丰台区| 乐业县| 舟曲县| 三江| 丰镇市| 宝应县| 额尔古纳市| 房产| 汝南县| 资兴市| 常熟市| 长泰县| 海门市| 澄城县| 昆明市| 阿克苏市| 区。| 珠海市| 巴彦县| 师宗县| 鄂托克前旗| 商都县| 建瓯市| 都匀市| 祁门县| 福鼎市| 黔江区| 体育|