[[Software/Android/¥¢¥×¥ê¥±¡¼¥·¥ç¥ó³«È¯¥Æ¥¥¹¥È]] *Chapter 2 : ¼ÂÍÑ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó³«È¯¤Î´ðÁà [#u0ca9539] ¡¡¤³¤Î¾Ï¤Ç¤Ï¥Õ¥¡¥¤¥ë¸¡º÷¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î³«È¯¤òÄ̤·¤Æ¡¢¼ÂÍÑŪ¤ÊAndroid¥¢¥×¥ê¥±¡¼¥·¥ç¥ó³«È¯¤Î´ðÁäò²òÀ⤷¤Þ¤¹¡£ ¡¡Android¤Ë¤Ï¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÇÆ°ºî¤¹¤ë¥µ¡¼¥Ó¥¹¡¢¥Û¡¼¥à²èÌ̤ËÀßÃÖ²Äǽ¤Ê¥¦¥£¥¸¥§¥Ã¥È¤È¤¤¤Ã¤¿ÍÍ¡¹¤Ê·ÁÂ֤Υ¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬Â¸ºß¤·¤Þ¤¹¤¬¡¢ËܾϤǤÏÁ´²èÌ̤òÀêͤ¹¤ë²èÌÌ¡Ê¥¦¥£¥ó¥É¥¦¡Ë¤ò»ý¤Ä¡¢°ìÈÌŪ¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¼è¤ê°·¤¤¤Þ¤¹¡£ ~ ~ **2-1. ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥¸¥§¥¯¥È¤Î¹½À®Í×ÁÇ [#h502241d] ¡¡¤Þ¤º¤Ï¥Ù¡¼¥¹¤È¤Ê¤ë¥×¥í¥¸¥§¥¯¥È¤òÍÑ°Õ¤·¤Þ¤¹¡£°Ê²¼¤ÎÍͤËÀßÄꤷ¡¢¿·µ¬Android¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£ -Project Name¤Ë¡ÖFFind¡×¤ÈÆþÎϤ·¤Þ¤¹ -Application Name¤Ë¡ÖFFind¡×¤ÈÆþÎϤ·¤Þ¤¹ -Package Name¤Ë¡Öcom.beatcraft.ffind¡×¤ÈÆþÎϤ·¤Þ¤¹ -Create Activity¤Ë¥Á¥§¥Ã¥¯¤òÆþ¤ì¡¢¡ÖFFindActivity¡×¤ÈÆþÎϤ·¤Þ¤¹  ¡¡Android¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥×¥í¥¸¥§¥¯¥È¤ÏÂ礤¯Ê¬¤±¤Æ°Ê²¼¤Î3¤Ä¤ÎÍ×ÁǤǹ½À®¤µ¤ì¤Þ¤¹¡£ ~ ~ |LEFT:|CENTER:|c |¡¡¡¥Þ¥Ë¥Õ¥§¥¹¥È¥Õ¥¡¥¤¥ë&br;¡¡¢ Java¥½¡¼¥¹¥³¡¼¥É&br;¡¡£¥ê¥½¡¼¥¹|&ref(./02_01.png,);&br;¿Þ2-1| ~ ¡¡ºîÀ®¤·¤¿¥×¥í¥¸¥§¥¯¥È¤òPackage Explorer¤Ç³Îǧ¤·¤Ä¤Ä¡¢³ÆÍ×ÁǤˤĤ¤¤Æ²òÀ⤷¤Æ¤¤¤¤Þ¤¹¡£ ~ ~ ¡¥Þ¥Ë¥Õ¥§¥¹¥È¥Õ¥¡¥¤¥ë¡ÊAndroidManifest.xml¡Ë~ ¡¡¤³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î̾Á°¤ä¥Ð¡¼¥¸¥ç¥ó¡¢¤É¤Î¤è¤¦¤Ê²èÌ̤ò»ý¤Ä¤«¡¢¤É¤Î¤è¤¦¤Êµ¡Ç½¤ò»ý¤Ä¤«¤È¤¤¤Ã¤¿ÆâÍƤòµ½Ò¤·¤¿XML¥Õ¥¡¥¤¥ë¤Ç¡¢Package Explorer¤Î¥×¥í¥¸¥§¥¯¥Èľ²¼¤ËÇÛÃÖ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Android¤Ï¤³¤Î¥Þ¥Ë¥Õ¥§¥¹¥È¤Ëµ½Ò¤µ¤ì¤¿ÆâÍƤò¸µ¤Ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò´ÉÍý¤·¤Þ¤¹¡£ ¡¡¥ê¥¹¥È2-1¤¬º£²ó¼«Æ°Åª¤ËºîÀ®¤µ¤ì¤¿¥Þ¥Ë¥Õ¥§¥¹¥È¥Õ¥¡¥¤¥ë¤Ç¤¹¡£ -¥ê¥¹¥È2-1 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.beatcraft.ffind" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".FFindActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> ~ ¡¡applicationÍ×ÁǤÎandroid:icon°À¤¬¤³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç»ÈÍѤ¹¤ë¥é¥ó¥Á¥ã¡¼¥¢¥¤¥³¥ó¤ò¼¨¤·¡¢android:label°À¤Ï¤³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î̾Á°¤ò¼¨¤·¤Þ¤¹¡£~ ¡¡¤½¤ì¤¾¤ì¤Î°À¤ÎÆâÍƤϡ¢¸å½Ò¤¹¤ë¥ê¥½¡¼¥¹¤ò ¡Ödrawable/ic_launcher¡×¡Ö@string/app_name¡×¤È¤¤¤Ã¤¿ID¤Ç»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£ ¡¡activityÍ×ÁǤˤϤ³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë´Þ¤Þ¤ì¤ë¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Ë´Ø¤¹¤ë¾ðÊó¤òµ½Ò¤·¤Þ¤¹¡£¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë»ë³ÐŪ¤Ê¥æ¡¼¥¶¡¼¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄ󶡤¹¤ë¤â¤Î¤Ç¡¢Â¾¤ÎOS¤Ç¸À¤¦¡Ö²èÌ̡פä¡Ö¥¦¥£¥ó¥É¥¦¡×¤ËÁêÅö¤·¤Þ¤¹¡£Ä̾ï¤Ï£±¤Ä¤Î¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤¬Á´²èÌ̤òÀêͤ·¡¢Ê£¿ô¤Î¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤ò»ý¤Ä¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤Ï¤³¤ì¤òÀÚ¤êÂؤ¨¤Æ»ÈÍѤ·¤Þ¤¹¡£~ ¡¡activityÍ×ÁÇÆâ¤Ë¤¢¤ëintent-filterÍ×ÁǤˤϡ¢¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤¬¼è¤ê°·¤¤²Äǽ¤Ê¥¤¥ó¥Æ¥ó¥È¤Ë¤Ä¤¤¤Æ¤Î¾ðÊó¤òµ½Ò¤·¤Þ¤¹¡£¥¤¥ó¥Æ¥ó¥È¤Ï¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤ä¾¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¡¢¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¥µ¡¼¥Ó¥¹¤Ê¤É¤È¤Î¥á¥Ã¥»¡¼¥¸Á÷¼õ¿®¤Ë»ÈÍѤ¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ç¡¢²èÌÌÁ«°Ü¤ä¥¢¥×¥ê¥±¡¼¥·¥ç¥ó´Ö¤ÎÏ¢·È¤Ë»ÈÍѤ·¤Þ¤¹¡£ ¡¡¤³¤Î¥Þ¥Ë¥Õ¥§¥¹¥È¤Ç¤Ï¡¢FFindActivity¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤¬¤³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¥á¥¤¥ó¤È¤Ê¤ë²èÌ̤Ǥ¢¤ê¡¢Android¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥é¥ó¥Á¥ã¡¼¤ËÅÐÏ¿¤µ¤ìµ¯Æ°²Äǽ¤Ç¤¢¤ë¤³¤È¤¬¼¨¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ~ ~ ¢Java¥½¡¼¥¹¥³¡¼¥É~ ¡¡¤³¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¹½À®¤¹¤ë¥½¡¼¥¹¥³¡¼¥É¤Ç¡¢Package Explorer¤Îsrc²¼¤ËÇÛÃÖ¤µ¤ì¤Þ¤¹¡£¸½Ãʳ¬¤Ç¤Ï¥×¥í¥¸¥§¥¯¥ÈºîÀ®»þ¤Ë¼«Æ°À¸À®¤µ¤ì¤¿FFindActivity.java¤¬¥Ñ¥Ã¥±¡¼¥¸²¼¤ËÃÖ¤«¤ì¤Æ¤¤¤Þ¤¹¡£ -¥ê¥¹¥È2-2 FFindActivity.java :  package com.beatcraft.ffind; import android.app.Activity; import android.os.Bundle; public class FFindActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } ~ ¡¡FFindActivity.java¡Ê¥ê¥¹¥È2-2¡Ë¤ÎonCreate¥á¥½¥Ã¥É¤Ï¡¢FFindActivity¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤¬À¸À®¤µ¤ì¤ëºÝ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¥á¥½¥Ã¥É¤Ç¡¢¤³¤Î¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤ËɬÍפʽé´üÀßÄê¤ò¤³¤³¤Ëµ½Ò¤·¤Þ¤¹¡£¤³¤³¤Ç¤Ïsuper¥¯¥é¥¹¤ÎonCreate¤ò¸Æ¤Ó½Ð¤·¤Æ´ðËÜŪ¤Ê½é´üÀßÄê¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤ë¤Û¤«¡¢setContentView¥á¥½¥Ã¥É¤Ç¤³¤Î¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Î³°´Ñ¤òÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£~ ¡¡setContentView¥á¥½¥Ã¥É¤Î°ú¿ô¤ËÅϤ·¤Æ¤¤¤ë¡ÖR.layout.main¡×¤È¤¤¤¦¤Î¤Ï¡¢¸å½Ò¤¹¤ë¥ê¥½¡¼¥¹¤«¤é²èÌ̥쥤¥¢¥¦¥È¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£ ~ ~ £¥ê¥½¡¼¥¹~ ¡¡¥ê¥½¡¼¥¹¤Ë¤Ï¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç»ÈÍѤµ¤ì¤ëʸ»úÎó¤ä²èÁü¡¢²»À¼¡¢²èÌ̥쥤¥¢¥¦¥È¤È¤¤¤Ã¤¿ÍÍ¡¹¤Êʪ¤¬´Þ¤Þ¤ì¤Þ¤¹¡£Package Explorer¤Ç¤Ïres²¼¤ËÇÛÃÖ¤µ¤ì¡¢¥ê¥½¡¼¥¹¤Î¼ïÊÌËè¤ËʬÎव¤ì¤Æ¤¤¤Þ¤¹¡£¥×¥í¥¸¥§¥¯¥ÈºîÀ®»þÅÀ¤Ç¤Ï¡¢drawable/layout/values¤È¤¤¤¦»°¼ï¤Î¥ê¥½¡¼¥¹¥Õ¥©¥ë¥À¤¬ºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¡¡drawable¤Ë¤Ï²èÁü¥Õ¥¡¥¤¥ë¤Ê¤É¤ÎÉÁ²è²Äǽ¤Ê¥ê¥½¡¼¥¹¤¬ÃÖ¤«¤ì¤Þ¤¹¡£-hdpi/-mdpi/-ldpi¤È¤¤¤¦¥µ¥Õ¥£¥Ã¥¯¥¹¤¬ÉÕÍ¿¤µ¤ì¤¿3¤Ä¤Î¥Õ¥©¥ë¥À¤¬ºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¤³¤ì¤ÏAndroid¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¿ÍͤʴĶ¤ËưŪ¤ËÂбþ¤µ¤»¤ë¤¿¤á¤Î»ÅÁȤߤǡ¢¤½¤ì¤¾¤ì¹â²òÁüÅÙ/Ãæ²òÁüÅÙ/Äã²òÁüÅÙüËöÍѤÎÉÁ²è¥ê¥½¡¼¥¹¤òÇÛÃÖ¤·¤Þ¤¹¡£~ ¡¡¤É¤Î´Ä¶¤Ç¤âƱ¤¸Êª¤ò»ÈÍѤ¹¤ë¾ì¹ç¤Ï¡¢¥µ¥Õ¥£¥Ã¥¯¥¹¤òÉÕ¤±¤Ê¤¤drawable¥Õ¥©¥ë¥À¤òºîÀ®¤·¡¢¤½¤³¤ËÇÛÃÖ¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£Âбþ¤¹¤ë²òÁüÅÙÍÑ¥Õ¥©¥ë¥À¤Ë¥ê¥½¡¼¥¹¤¬Ìµ¤¤¾ì¹ç¤Ï¾¤Î²òÁüÅÙÍѥ꥽¡¼¥¹¤ò¼«Æ°Åª¤Ë¥¹¥±¡¼¥ë¤·¤Æ»ÈÍѤµ¤ì¤Þ¤¹¡£~ ¡¡¥Þ¥Ë¥Õ¥§¥¹¥È¤Îandroid:icon°À¤Ç»ØÄꤷ¤¿¡Ö@drawable/ic_launcher¡×¤¬¼¨¤¹²èÁü¥ê¥½¡¼¥¹¤Î¼ÂÂΡÊic_launcher.png¡Ë¤Ï¤³¤³¤Ë´Þ¤Þ¤ì¤Þ¤¹¡£ ¡¡layout¤Ë¤Ï¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Î²èÌ̥쥤¥¢¥¦¥È¤òµ½Ò¤·¤¿XML¥Õ¥¡¥¤¥ë¤¬ÃÖ¤«¤ì¤Þ¤¹¡£¥×¥í¥¸¥§¥¯¥ÈºîÀ®»þÅÀ¤Ç¤Ïmain.xml¤È¤¤¤¦¥ì¥¤¥¢¥¦¥È¥Õ¥¡¥¤¥ë¤¬¼«Æ°À¸À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£~ ¡¡FFindActivity.java¤ÎsetContentView¥á¥½¥Ã¥É¤Ç»ØÄꤷ¤¿¡ÖR.layout.main¡×¤¬¤³¤Î¥ì¥¤¥¢¥¦¥È¤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£ ¡¡values¤Ë¤Ïʸ»úÎó¤äÎóµó¤È¤¤¤Ã¤¿¡¢ÍÍ¡¹¤ÊÃͤòÄêµÁ¤·¤¿XML¥Õ¥¡¥¤¥ë¤¬ÃÖ¤«¤ì¤Þ¤¹¡£¥×¥í¥¸¥§¥¯¥ÈºîÀ®»þÅÀ¤Ç¤Ïstrings.xml¤È¤¤¤¦Ê¸»úÎó¤òÄêµÁ¤·¤¿XML¥Õ¥¡¥¤¥ë¤¬¼«Æ°À¸À®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£¥Õ¥©¥ë¥À¤Ë¡Ö-ja¡×¤ä¡Ö-en¡×¤È¤¤¤Ã¤¿¥µ¥Õ¥£¥Ã¥¯¥¹¤ò¤Ä¤±¤¿¤â¤Î¤òºîÀ®¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¸À¸ìÊ̤ÎÃͥ꥽¡¼¥¹¤òÍÑ°Õ¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£~ ¡¡¥Þ¥Ë¥Õ¥§¥¹¥È¤Îandroid:label°À¤Ç»ØÄꤷ¤¿¡Ö@string/app_name¡×¤¬¼¨¤¹Ê¸»úÎó¥ê¥½¡¼¥¹¤ÎÆâÍƤ¬¤³¤Îstrings.xml¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ ¡¡¥ê¥½¡¼¥¹¤Ï¥ê¥½¡¼¥¹ID¤Ë¤è¤Ã¤Æ¥Þ¥Ë¥Õ¥§¥¹¥È¤äJava¥½¡¼¥¹¥³¡¼¥É¡¢Â¾¤Î¥ê¥½¡¼¥¹¤«¤é»²¾È¤µ¤ì¤Þ¤¹¡£¥ê¥½¡¼¥¹ID¤Ë¤ÏXML¥Õ¥¡¥¤¥ë¤Ç»²¾È¤µ¤ì¤ë¾ì¹ç¤ÈJava¥½¡¼¥¹¥³¡¼¥É¤Ç»²¾È¤µ¤ì¤ë¾ì¹ç¤È¤ÇÆó¼ïÎà¤ÎµË¡¤¬¤¢¤ê¡¢°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ -XML¥Õ¥¡¥¤¥ë¤«¤é»²¾È¤¹¤ë¾ì¹ç : --@¥ê¥½¡¼¥¹¼ïÊÌ/¥ê¥½¡¼¥¹Ì¾ -Java¥½¡¼¥¹¥³¡¼¥É¤«¤é»²¾È¤¹¤ë¾ì¹ç : --R.¥ê¥½¡¼¥¹¼ïÊÌ.¥ê¥½¡¼¥¹Ì¾ ~ ~ ¡¡drawable¤Èlayout¤Ï¤½¤Î¤Þ¤Þ¥ê¥½¡¼¥¹¼ïÊ̤Ȥʤꡢ¥ê¥½¡¼¥¹Ì¾¤Ë¤Ï¥ê¥½¡¼¥¹¼ÂÂΤΥե¡¥¤¥ë̾¤«¤é¥µ¥Õ¥£¥Ã¥¯¥¹¤ò¼è¤ê½ü¤¤¤¿Êª¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤ì¤Þ¤Ç¸«¤¿Îã¤Ç¸À¤¨¤Ð¡¢drawable-hdpi/mdpi/ldpi¤Ë´Þ¤Þ¤ì¤ëic_launcher.png¤Î¥ê¥½¡¼¥¹ID¤Ï¡Ö@drawable/ic_launcher¡×¡ÖR.drawable.ic_launcher¡×¡¢layout¤Ë´Þ¤Þ¤ì¤ëmain.xml¤¬¡ÖR.layout.main¡×¤Ë¤Ê¤ë¡¢¤È¸À¤Ã¤¿¶ñ¹ç¤Ç¤¹¡£ ¡¡values¤Ë´Þ¤Þ¤ì¤ëXML¥Õ¥¡¥¤¥ë¤Î¥ê¥½¡¼¥¹¼ïÊ̤Ïvalues¤È¤Ï¤Ê¤é¤º¡¢¤½¤ì¤¾¤ì¤ÎXML¥Õ¥¡¥¤¥ëÆâ¤ÇÄêµÁ¤µ¤ì¤¿Í×ÁÇ̾¤Ë¤Ê¤ê¤Þ¤¹¡£¼«Æ°À¸À®¤µ¤ì¤¿strings.xml¡Ê¥ê¥¹¥È2-3¡Ë¤Ë¤Ï¡¢resourcesÍ×ÁǤ˰Ϥޤ줿string¤È¤¤¤¦Í×ÁǤ¬Ê¤ó¤Ç¤¤¤Þ¤¹¡£¤³¤ÎÍ×ÁÇ̾¤¬¥ê¥½¡¼¥¹¼ïÊ̤Ȥʤꡢname°À¤¬¥ê¥½¡¼¥¹Ì¾¤È¤Ê¤ê¤Þ¤¹¡£~ ¡¡¥Þ¥Ë¥Õ¥§¥¹¥È¤Ç»ØÄꤷ¤¿¡Ö@string/app_name¡×¤¬¥ê¥½¡¼¥¹ID¤È¤Ê¤ê¡¢¤½¤ì¤¬»Ø¤·¼¨¤¹Ê¸»úÎ󤬡ÖFFind¡×¤È¸À¤Ã¤¿¶ñ¹ç¤Ç¤¹¡£ -¥ê¥¹¥È2-3 strings.xml : < xml version="1.0" encoding="utf-8" > <resources> <string name="hello">Hello World, FFindActivity!</string> <string name="app_name">FFind</string> </resources> ~ ~ **2-2. ¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Î¹½À®Í×ÁǤȥ쥤¥¢¥¦¥È [#nd08055e] ¡¡Android¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î´é¤È¤Ê¤ë¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó²èÌ̤Îɽ¼¨¤ÎÏÈÁȤߤòÄ󶡤·¤Þ¤¹¤¬¡¢¤³¤ì¤À¤±¤Ç¤Ï²¿¤«¤òɽ¼¨¤·¤¿¤ê¥æ¡¼¥¶¡¼ÆþÎϤò¼õ¤±ÉÕ¤±¤¿¤ê¤È¤¤¤Ã¤¿¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¡£¤³¤ÎÏȤÎÃæ¤Ë¡¢¥Ó¥å¡¼¡ÊView¡Ë¤ä¥Ó¥å¡¼¥°¥ë¡¼¥×¡ÊViewGroup¡Ë¤È¤¤¤Ã¤¿³¬Áع½Â¤¤ò»ý¤ÄGUIÉôÉʤòÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ ¡¡¥Ó¥å¡¼¤ÏGUIÉôÉʤδðËܤȤʤë¤â¤Î¤Ç¡¢¥Ü¥¿¥ó¤ä¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤Ê¤É¤ÏÁ´¤Æ¥Ó¥å¡¼¤Ç¤¹¡£¤Þ¤¿¸å½Ò¤Î¥Ó¥å¡¼¥°¥ë¡¼¥×¤â¥Ó¥å¡¼¤Î°ì¼ï¤È¤Ê¤ê¤Þ¤¹¡£¥Ó¥å¡¼¥°¥ë¡¼¥×¤Ï¥Ó¥å¡¼¤òÊ£¿ô¤Þ¤È¤á¤Æ´ÉÍý¤¹¤ë¤â¤Î¤Ç¡¢GUIÉôÉʤò¤É¤Î¤è¤¦¤ËÇÛÃÖ¤¹¤ë¤«¤ò·èÄꤹ¤ë¥ì¥¤¥¢¥¦¥È¤â¤³¤ì¤Ë´Þ¤Þ¤ì¤Þ¤¹¡£ ¡¡¥ì¥¤¥¢¥¦¥È¤ÏGUIÉôÉʤò¤É¤Î¤è¤¦¤ËÇÛÃÖ¤¹¤ë¤«¤ò·èÄê¤Å¤±¤ë¥Ó¥å¡¼¥°¥ë¡¼¥×¤Ç¡¢LinearLayout¤äRelativeLayout¡¢TableLayout¤È¤¤¤Ã¤¿ÇÛÃÖÊýË¡¤Î°Û¤Ê¤ë¥ì¥¤¥¢¥¦¥È¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ -LinearLayout --LinearLayout¤Ï¥Ó¥å¡¼¤òÅÐÏ¿¤·¤¿½çÈÖ¤Ëʤ٤ëɸ½àŪ¤Ê¥ì¥¤¥¢¥¦¥È¤Ç¤¹¡£½ÄÊý¸þ¤Ëʤ٤Ƥ¤¤¯¤«¡¢²£Êý¸þ¤Ëʤ٤Ƥ¤¤¯¤«¤òÁªÂò½ÐÍè¤Þ¤¹¡£ -RelativeLayout --RelativeLayout¤Ï¥Ó¥å¡¼Æ±»Î¤ÎÇÛÃ֤˴ØÏ¢À¤ò¤â¤¿¤»¡¢¤½¤ì¤¾¤ì¤Î¥Ó¥å¡¼¤Î°ÌÃÖ´Ø·¸¤ò»ØÄꤹ¤ë¤³¤È¤ÇÊ£»¨¤Ê¥ì¥¤¥¢¥¦¥È¤ò¼Â¸½¤·¤Þ¤¹¡£ -TableLayout --TableLayout¤Ïɽ·Á¼°¤Ë¥Ó¥å¡¼¤òÇÛÃÖ¤¹¤ë¥ì¥¤¥¢¥¦¥È¤Ç¤¹¡£ ¡¡¤³¤Î¾¤Ë¤âÍÑÅӤ˱þ¤¸¤¿¤¤¤¯¤Ä¤«¤Î¥ì¥¤¥¢¥¦¥È¤¬Ä󶡤µ¤ì¤Æ¤ª¤ê¡¢¥ì¥¤¥¢¥¦¥È¼«ÂΤⳬÁØŪ¤ËÇÛÃÖ¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£ ~ ~ **2-3. ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥ì¥¤¥¢¥¦¥ÈºîÀ® [#c0a8843b] ¡¡¤³¤³¤«¤é¤ÏºîÀ®¤·¤¿¥×¥í¥¸¥§¥¯¥È¤ò¤â¤È¤Ë¼ÂºÝ¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÁȤßÂؤ¨¤Æ¤¤¤¤Þ¤¹¡£º£²óºîÀ®¤¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÏAndroidüËöÆâ¤Î¥Õ¥¡¥¤¥ë¤òÁöºº¤·¡¢ÆþÎϤµ¤ì¤¿¥¡¼¥ï¡¼¥É¤ò¥Õ¥¡¥¤¥ë̾¤Ë´Þ¤à¥Õ¥¡¥¤¥ë¤ò°ìÍ÷ɽ¼¨¤¹¤ë¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£ ¡¡¿Þ2-2¤¬º£²ó¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î²èÌÌ¥¤¥á¡¼¥¸¤È¤Ê¤ê¤Þ¤¹¡£ CENTER:&ref(./02_02.png,); CENTER:¿Þ2-2~ ~ ~ ¡¡Eclipse¤ÎPackage Explorer¤«¤émain.xml¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤¡¢¾åµ¥¤¥á¡¼¥¸¤Ë¤¢¤ï¤»¥ì¥¤¥¢¥¦¥È¤òÊѹ¹¤·¤Æ¤¤¤¤Þ¤¹¡£¼«Æ°À¸À®¤µ¤ì¤¿main.xml¤Ï¿Þ2-3¤Î¤è¤¦¤Ë¡¢½ÄÊý¸þ¤ÎLinearLayout¤òºÆ¾å°Ì¤ËÃÖ¤¡¢¤½¤³¤ËTextView¤ò1¤ÄÇÛÃÖ¤·¤¿Êª¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ CENTER:&ref(./02_03.png,); CENTER:¿Þ2-3~ ~ ~ ¡¡¥µ¥ó¥×¥ë¥×¥í¥¸¥§¥¯¥È¤Ç¤Ï¡ÖHello World, FFindActivity!¡×¤Èɽ¼¨¤¹¤ëTextView¤¬ÇÛÃÖ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¤³¤ì¤ÏÉÔÍפȤʤë¤Î¤ÇÃæ±û¤Î¥ì¥¤¥¢¥¦¥¿¤Ç³ºÅö²Õ½ê¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢±¦Éô¤ÎOutline¤«¤é¡ÖTextView¡×¤È¤Ê¤Ã¤Æ¤¤¤ë¹Ô¤ò¥¯¥ê¥Ã¥¯¤·¤ÆÁªÂò¤·¡¢ºï½ü¥¡¼¤ä±¦¥¯¥ê¥Ã¥¯¤Ë¤è¤ë¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤Î¡ÖDelete¡×¤òÁªÂò¤·¤Æºï½ü¤·¤Þ¤¹¡£ ¡¡Â³¤¤¤Æº¸Éô¤ÎPalette¤«¤éLayouts¤ò¥¯¥ê¥Ã¥¯¤·¤ÆŸ³«¤·¡¢LinearLayout (Horizontal)¤òÀè¤Û¤ÉTextView¤¬¤¢¤Ã¤¿¾ì½ê¤Ë¥É¥é¥Ã¥°¡õ¥É¥í¥Ã¥×¤ÇÇÛÃÖ¤·¤Þ¤¹¡£¤³¤ì¤Ç¥Ó¥å¡¼¤ò²£Êý¸þ¤Ëʤ٤ë¤è¤¦Í½¤áÀßÄꤵ¤ì¤¿LinearLayout¤¬ºÇ¾å°Ì¤ÎLinearLayoutÇÛ²¼¤ËÄɲ䵤ì¤Þ¤¹¡£ ¡¡¼¡¤Ë¤³¤Î¥ì¥¤¥¢¥¦¥È¤Ë¥¡¼¥ï¡¼¥É¤òÆþÎϤ¹¤ë¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤È¸¡º÷¥Ü¥¿¥ó¤òÇÛÃÖ¤·¤Þ¤¹¡£º¸Éô¤ÎPaltette¤«¤éText Fields¤ò¥¯¥ê¥Ã¥¯¤·¤ÆŸ³«¤·¡¢¡Öabc¡×¤È½ñ¤«¤ì¤¿¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¡ÊPlain Text¡Ë¤òº£Äɲä·¤¿¥ì¥¤¥¢¥¦¥È¾å¤ËÇÛÃÖ¤·¤Þ¤¹¡£ÇÛÃÖ¤·¤¿¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤ò¥¯¥ê¥Ã¥¯¤·¡¢¥ì¥¤¥¢¥¦¥¿²¼Éô¤Î¡ÖProperties¡×¡Ê¢¨¡Ë¤Ç°Ê²¼¤Î¤è¤¦¤ËÀßÄê¤òÊѹ¹¤·¤Þ¤¹¡£~ ¢¨Properties¤¬É½¼¨¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢Eclipse¤Î¥á¥Ë¥å¡¼¤«¤é¡ÖWindow > Show View > Other...¡×¤òÁªÂò¤·¤Æ"Show View"¥À¥¤¥¢¥í¥°¤òɽ¼¨¤·¡¢¡ÖGeneral > Properties¡×¤òÁªÂò¤·¤Æ¡ÖOK¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ²¼¤µ¤¤¡£ -Id¤Ë¡Ö@+id/FindTarget¡×¤ÈÆþÎϤ·¤Þ¤¹¡£ -Layout height¤Ë¡Öwrap_content¡×¤ò»ØÄꤷ¤Þ¤¹¡£ -Layout weight¤Ë¡Ö1¡×¤ÈÆþÎϤ·¤Þ¤¹¡£ -Layout width¤Ë¡Öwrap_content¡×¤ò»ØÄꤷ¤Þ¤¹¡£ -Single line¤Ë¡Ötrue¡×¤ò»ØÄꤷ¤Þ¤¹¡£ ~ ¡¡Id¤ËÆþÎϤ·¤¿ÆâÍƤϤ³¤Î¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤Î¥ê¥½¡¼¥¹ID¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢¤³¤Î»þÅÀ¤Ç¤É¤³¤Ë¤âÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£¡Ö@+¥ê¥½¡¼¥¹¼ïÊÌ/¥ê¥½¡¼¥¹Ì¾¡×¤È¤¤¤¦µË¡¤Ï¡¢¤³¤Î¾ì¤Ç»ØÄꤷ¤¿¥ê¥½¡¼¥¹¼ïÊ̤˥꥽¡¼¥¹Ì¾¤òÄɲ乤뤳¤È¤òɽ¤·¤Þ¤¹¡£ ¡¡Layout height¤ÈLayout width¤Ï¤³¤Î¥Ó¥å¡¼¤Î¹â¤µ¤ÈÉý¤ò·èÄꤹ¤ë°À¤Ç¡¢wrap_content¤ò»ØÄꤹ¤ë¤È¤½¤Î¥Ó¥å¡¼¼«¿È¤¬É¬ÍפȤ¹¤ë¥µ¥¤¥º¤Ë¼«Æ°Åª¤ËÄ´À°¤µ¤ì¤Þ¤¹¡£¤³¤Î¾¡¢¿Æ¤È¤Ê¤ë¥Ó¥å¡¼¤Î¥µ¥¤¥º¤Ë¥Õ¥£¥Ã¥È¤µ¤»¤ëfill_parent¡ÊAPI level 8°Ê¹ß¤Ç¤Ïmatch_parent¡Ë¤ä¡¢¥µ¥¤¥º¤òľÀÜ»ØÄꤹ¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£~ ¡¡Layout weight¤Ï¿Æ¥Ó¥å¡¼Æâ¤Ç»ÈÍѲÄǽ¤ÊÎΰè¤ò¤É¤ÎÄøÅ٤νŤߤÇÀêͤ¹¤ë¤«¤ò·èÄꤹ¤ë°À¤Ç¡¢1¤ò»ØÄꤷ¤¿¾ì¹ç¡¢Â¾¤Î¥Ó¥å¡¼¤¬ÇÛÃÖ¤µ¤ì¤¿»Ä¤ê¤ÎÎΰèÁ´¤Æ¤ò»ÈÍѤ·¤Þ¤¹¡£ ¡¡Single line¤òtrue¤Ë¤¹¤ë¤È¡¢¤³¤Î¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤Ë¤ÏÊ£¿ô¹Ô¤ÎÆþÎϤ¬½ÐÍè¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£¥Õ¥¡¥¤¥ë̾¤Î°ìÉô¤¬²þ¹Ô¤ò´Þ¤àÊ£¿ô¹Ô¤Ë¤Þ¤¿¤¬¤ë¤³¤È¤ÏͤêÆÀ¤Ê¤¤¤¿¤á¡¢¤³¤³¤Ç¤Ïtrue¤òÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£ ¡¡°ú¤Â³¤¸¡º÷¥Ü¥¿¥ó¤òÄɲä·¤Þ¤¹¡£º¸Éô¤ÎPalette¤«¤éForm Widgets¤ò¥¯¥ê¥Ã¥¯¤·¤ÆŸ³«¤·¡¢¡ÖButton¡×¤ò¥É¥é¥Ã¥°¡õ¥É¥í¥Ã¥×¤Ç¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤Î±¦Â¦¤ËÇÛÃÖ¤·¤Þ¤¹¡£ÇÛÃÖ¤·¤¿¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¡¢¥ì¥¤¥¢¥¦¥¿²¼Éô¤Î¡ÖProperties¡×¤Ç°Ê²¼¤Î¤è¤¦¤ËÀßÄê¤òÊѹ¹¤·¤Þ¤¹¡£ -Id¤Ë¡Ö@+id/FindButton¡×¤ÈÆþÎϤ·¤Þ¤¹¡£ -Text¤Ë¡Ö@string/find_button¡×¤ÈÆþÎϤ·¤Þ¤¹¡£ -Layout height¤Ë¡Öwrap_content¡×¤ò»ØÄꤷ¤Þ¤¹¡£ -Layout weight¤ò¶õ¤Ë¤·¤Þ¤¹¡£ -Layout width¤Ë¡Öwrap_content¡×¤ò»ØÄꤷ¤Þ¤¹¡£ ¡¡Layout weight¤ò¶õ¤Ë¤¹¤ë¤³¤È¤Ç¤³¤Î¥Ü¥¿¥ó¤Ïɽ¼¨¤Ë¤ê¤ë¤À¤±¤ÎÂ礤µ¤ËÄ´À°¤µ¤ì¤Þ¤¹¡£ ¡¡Text°À¤Ï¤³¤Î¥Ü¥¿¥ó¤Ëɽ¼¨¤¹¤ë¥é¥Ù¥ë¤Îʸ»úÎó¤ò»ØÄꤷ¤Þ¤¹¡£@string/find_button¤È¤¤¤¦¥ê¥½¡¼¥¹ID¤Ï¤³¤ÎÃʳ¬¤Ç¤Ï¤Þ¤ÀÄêµÁ¤·¤Æ¤¤¤Ê¤¤¤¿¤á¡¢¤³¤Î¤Þ¤Þ¤Ç¤Ï¥ê¥½¡¼¥¹ID¤¬¤½¤Î¤Þ¤Þ¥Ü¥¿¥ó¤Ëɽ¼¨¤µ¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ ¡¡Package Explorer¤«¤éstrings.xml¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤¡¢Ê¸»úÎó¥ê¥½¡¼¥¹¤òÄɲä·¤Þ¤¹¡£ÉÔÍפˤʤä¿@string/helloʸ»úÎó¥ê¥½¡¼¥¹¤Ïºï½ü¤·¡¢¥ê¥¹¥È2-4¤Î¤è¤¦¤ËÊÔ½¸¤·¤Æ¤¯¤À¤µ¤¤¡£ -¥ê¥¹¥È2-4 strings.xml : < xml version="1.0" encoding="utf-8" > <resources> <string name="app_name">FFind</string> <string name="find_button">¸¡º÷</string> </resources> ~ ¡¡ºÇ¸å¤Ë¸¡º÷·ë²Ì¤òɽ¼¨¤¹¤ë¥Ó¥å¡¼¤òÄɲä·¤Þ¤¹¡£ËÜÍèɽ¼¨ÍѤȤ·¤ÆŬÀڤǤϤ¢¤ê¤Þ¤»¤ó¤¬¡¢ÀâÌÀ¤ò´Êñ¤Ë¤¹¤ë¤¿¤á¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤ò¤³¤³¤Ç¤â»ÈÍѤ·¤Þ¤¹¡£ºÆ¤ÓPalette¤«¤éText Fields¤ò¥¯¥ê¥Ã¥¯¤·¤ÆŸ³«¤·¡¢¥×¥ì¡¼¥ó¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤òFindTarget/FindButton¤Î²¼Éô¤Ë¥É¥é¥Ã¥°¡õ¥É¥í¥Ã¥×¤ÇÇÛÃÖ¤·¤Þ¤¹¡£¤³¤Á¤é¤Î¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤Î¥×¥í¥Ñ¥Æ¥£¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ -Id¤Ë¡Ö@+id/Result¡×¤ÈÆþÎϤ·¤Þ¤¹¡£ -Layout height¤Ë¡Öfill_parent¡×¤ò»ØÄꤷ¤Þ¤¹¡£ -Layout width¤Ë¡Öfill_parent¡×¤ò»ØÄꤷ¤Þ¤¹¡£ -Editable¤Ë¡Öfalse¡×¤òÀßÄꤷ¤Þ¤¹¡£ ¡¡Layout height/Layout width¤Ëfill_parent¡ÊAPI level 8°Ê¹ß¤Ç¤Ïmatch_parent¡Ë¤ò»ØÄꤹ¤ë¤³¤È¤Ç¡¢²èÌ̤λĤê¤ò¤³¤Î¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤¬Àêͤ¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£~ ¡¡¤³¤Î¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤Ï·ë²Ìɽ¼¨¤ò¹Ô¤¦¤À¤±¤Î¤â¤Î¤Ê¤Î¤Ç¡¢Editable¤Ëfalse¤òÀßÄꤷ¤ÆÊÔ½¸ÉÔ²Äǽ¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ ¡¡¤³¤³¤Þ¤Ç¤ÇOutline¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£¿Æ»Ò´Ø·¸¤¬¤ª¤«¤·¤¤¾ì¹ç¡¢Outline¾å¤Ç³Æ¥Ó¥å¡¼Ì¾¤ò¥É¥é¥Ã¥°¡õ¥É¥í¥Ã¥×¤¹¤ë¤³¤È¤ÇÄ´À°¤¬½ÐÍè¤Þ¤¹¡£ ¡¡¡¦LinearLayout~ ¡¡¡¡¡¦linearLayout1~ ¡¡¡¡¡¡¡¦FindTarget~ ¡¡¡¡¡¡¡¦FindButton~ ¡¡¡¡¡¦Result ¡¡°Ê¾å¤Ç¥ì¥¤¥¢¥¦¥ÈºîÀ®¤Ï´°Î»¤Ç¤¹¡£¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¼Â¹Ô¤·¤Æ¡¢ºîÀ®¤·¤¿¥ì¥¤¥¢¥¦¥È¤¬È¿±Ç¤µ¤ì¤Æ¤¤¤ë¤«¤ò³Îǧ¤·¤Æ²¼¤µ¤¤¡£ ~ ~ **2-4. ¸¡º÷½èÍý¤Î¼ÂÁõ [#hf8cfb80] ¡¡¤³¤³¤«¤é¤ÏAndroid¤Î¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤òÁöºº¤·¡¢»ØÄê¤Î¥¡¼¥ï¡¼¥É¤ò»ý¤Ä¥Õ¥¡¥¤¥ë¤ò¥ê¥¹¥È¥¢¥Ã¥×¤¹¤ë½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡£ ¡¡Package Explorer¤ÇFFindActivity.java¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤¡¢onCreate¥á¥½¥Ã¥É¤Î¸å¤Ë°Ê²¼¤Îprivate¥á¥½¥Ã¥É¤òÄɲä·¤Þ¤¹¡£ -¥ê¥¹¥È2-5 : private void listFile(String target, String folder, ArrayList<String> list) { File f = new File(folder); File fl[] = f.listFiles(); if (fl != null) { for (int i = 0; i < fl.length; ++i) { if (list.size() == 5000) { break; } File tmp = fl[i]; String name = tmp.getName(); if (name.contains(target) == true) { list.add(name); } if (tmp.isDirectory() == true) { try { String c = tmp.getAbsolutePath(); if (c.equals(tmp.getCanonicalPath()) == true) { if (c != null) { listFile(target, c, list); } } } catch (Exception e) { e.printStackTrace(); } } } } } ~ ¡¡¤³¤Î¥á¥½¥Ã¥É¤Ïfolder¤Ç»ØÄꤵ¤ì¤¿¥Õ¥©¥ë¥À¤Î¥Õ¥¡¥¤¥ë°ìÍ÷¤ò¼èÆÀ¤·¡¢target¤Ç»ØÄꤵ¤ì¤¿¥¡¼¥ï¡¼¥É¤Ë°ìÃפ¹¤ëʪ¤¬¤¢¤ì¤Ðlist¤ËÄɲäò¹Ô¤¦ºÆµ¢Åª¥á¥½¥Ã¥É¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡Ê¸¡º÷·ë²Ì¤ÏºÇÂç5000·ï¤Þ¤Ç¤È¤·¤Æ¤¤¤Þ¤¹¡Ë¡£File¥¯¥é¥¹¤ÎlistFiles¥á¥½¥Ã¥É¤Ç°ìÍ÷¤ò¼èÆÀ¤·¡¢¥ê¥¹¥È¤Î³Æ¥Õ¥¡¥¤¥ë¤Ë¤Ä¤¤¤ÆgetName¤Ç¼èÆÀ¤·¤¿¥Õ¥¡¥¤¥ë̾¤ò¥Á¥§¥Ã¥¯¤·¡¢target¤¬´Þ¤Þ¤ì¤Æ¤¤¤ì¤Ð¥ê¥¹¥È¤ËÄɲ䷤Ƥ¤¤Þ¤¹¡£~ ¡¡isDirectory¥á¥½¥Ã¥É¤Ç¥Õ¥©¥ë¥À¤Ç¤¢¤ë¤«¤É¤¦¤«¤ò¥Á¥§¥Ã¥¯¤·¡¢¥Õ¥©¥ë¥À¤Ç¤¢¤ì¤ÐƱ¥Õ¥¡¥¤¥ë¤ÎÀäÂХѥ¹¤òÂоݤȤ·¤ÆlistFile¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Æ¤¤¤Þ¤¹¤¬¡¢getCanonicalPath¥á¥½¥Ã¥É¤È¤ÎÈæ³Ó¤¬false¤È¤Ê¤Ã¤¿¾ì¹ç¤Ïsymbolic link¤ÈȽÃǤ·¡¢ºÆµ¢¸Æ¤Ó½Ð¤·¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤»¤ó¡£ ¡¡¤³¤³¤Ç»ÈÍѤ·¤Æ¤¤¤ëFile¥¯¥é¥¹¤ÈArrayList¥¯¥é¥¹¤òÍøÍѲÄǽ¤Ë¤¹¤ë¤¿¤á¡¢Î¾¥Ñ¥Ã¥±¡¼¥¸¤òandroid.app.Activity¤ÎÁ°¤Ç¥¤¥ó¥Ý¡¼¥È¤·¤Þ¤¹¡£ import java.io.File; import java.util.ArrayList; ¡¡¼¡¤Ë¡¢¸¡º÷·ë²Ì¤ò³ÊǼ¤¹¤ë¤¿¤á¡¢onCreate¥á¥½¥Ã¥É¤ÎľÁ°¤Ç°Ê²¼¤Î¥á¥ó¥ÐÊÑ¿ô¤òÄɲä·¤Þ¤¹¡£ArrayList¤Ï»ØÄꥯ¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÍ×ÁǤ˻ý¤ÄÇÛÎó¥ê¥¹¥È¤Î¥Æ¥ó¥×¥ì¡¼¥È¥¯¥é¥¹¤Ç¤¹¡£ private ArrayList<String> mList; ¡¡onCreate¤ÎsetContentView¸Æ¤Ó½Ð¤·¸å¤Ë¤³¤ÎÇÛÎó¥ê¥¹¥È¤òÀ¸À®¤·¡¢¸¡º÷¥Ü¥¿¥ó¤Î½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡Ê¥ê¥¹¥È2-6¡Ë¡£ -¥ê¥¹¥È2-6 : mList = new ArrayList<String>(); Button button = (Button) findViewById(R.id.FindButton); if (button != null) { button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (view.getId() == R.id.FindButton) { EditText text; text = (EditText) findViewById(R.id.FindTarget); String target = text.getText().toString(); if (target.equals("") != true) { mList.clear(); listFile(target, "/", mList); if (mList.size() > 0) { String tmp = ""; for (int i = 0; i < mList.size(); ++i) { tmp += mList.get(i) + "\n"; } text = (EditText) findViewById(R.id.Result); text.setText(tmp); } } } } }); } ~ ¡¡findViewById¥á¥½¥Ã¥É¤Ï¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤ä¥Ó¥å¡¼¤¬»ý¤Ã¤Æ¤¤¤ë»Ò¥Ó¥å¡¼¤ò¥ê¥½¡¼¥¹ID¤Ç¸¡º÷¤·¤ÆÊÖ¤¹¥á¥½¥Ã¥É¤Ç¡¢¤³¤³¤Ç¤Ï¡ÖR.id.FindButton¡×¤ò»ØÄꤷ¤Æ¸¡º÷¥Ü¥¿¥ó¤ò¼èÆÀ¤·¤Æ¤¤¤Þ¤¹¡£~ ¡¡¥Ü¥¿¥ó¤Î¼èÆÀ¤ËÀ®¸ù¤·¤¿¾ì¹ç¡¢setOnClickListener¥á¥½¥Ã¥É¤Ç¥¯¥ê¥Ã¥¯»þ¤Ë¼Â¹Ô¤µ¤ì¤ë½èÍý¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£¤³¤³¤Ç¤Ï̵̾¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¥¯¥é¥¹¤òÀ¸À®¤·¡¢Æ±¥á¥½¥Ã¥É¤Î°ú¿ô¤ËÅϤ·¤Æ¤¤¤Þ¤¹¡£ ¡¡onClick¤¬¼ÂºÝ¤Ë¥Ü¥¿¥ó¤Î½èÍý¤ò¼ÂÁõ¤¹¤ë¥á¥½¥Ã¥É¤Ë¤Ê¤ê¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤Ë¤Ï¥¯¥ê¥Ã¥¯¤ò°ú¤µ¯¤³¤·¤¿¥Ó¥å¡¼¤¬°ú¿ô¤È¤·¤ÆÅϤµ¤ì¤ë¤¿¤á¡¢getId¥á¥½¥Ã¥É¤Ç¼èÆÀ¤·¤¿¥ê¥½¡¼¥¹ID¤¬¸¡º÷¥Ü¥¿¥ó¤Îʪ¤Ç¤¢¤ë¤«¤ò¥Á¥§¥Ã¥¯¤·¡¢¸¡º÷½èÍý¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£~ ¡¡¸¡º÷½èÍý¤Ç¤ÏFindTarget¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤«¤égetText¥á¥½¥Ã¥É¤Ç¼èÆÀ¤·¤¿ÆâÍƤò¥¡¼¥ï¡¼¥É¤Ë¡¢¥ë¡¼¥È¥Õ¥©¥ë¥À¤ò¸¡º÷¥Õ¥©¥ë¥À¤Ë»ØÄꤷ¤ÆlistFile¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Æ¤¤¤Þ¤¹¡£¥¡¼¥ï¡¼¥É¤¬¶õ¤Î¾ì¹ç¤Ï¸¡º÷¤ò¼Â¹Ô¤»¤º¡¢¤Þ¤¿¸¡º÷Á°¤Ë·ë²Ì¥ê¥¹¥È¤ò¥¯¥ê¥¢¤·¤Æ¤¤¤ëÅÀ¤Ë¤âÃí°Õ¤·¤Æ²¼¤µ¤¤¡£ ¡¡ºÇ¸å¤Ë·ë²Ì¥ê¥¹¥È¤ÎÆâÍƤò¥Á¥§¥Ã¥¯¤·¡¢¶õ¤Ç¤Ê¤±¤ì¤Ð¥ê¥¹¥È¤ÎÆâÍƤòResult¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤Ë¥»¥Ã¥È¤·¤Þ¤¹¡£ ¡¡°Ê¾å¤Ç¼ÂÁõ¤Ï´°Î»¤Ç¤¹¡£Áᮼ¹Ԥ·¤Æ¤ß¤Þ¤·¤ç¤¦¡£ ~ ~ **2-5. ANRÌäÂê¤È¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥Þ¥ë¥Á¥¹¥ì¥Ã¥É²½ [#y84bfe9d] ¡¡Á°¹à¤Ç´°À®¤·¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤¹¤¬¡¢¸¡º÷·ë²Ì¤¬Â¿¤¯¤Ê¤ë¤È¿Þ2-4¤Î¤è¤¦¤Ê¥¨¥é¡¼¤¬È¯À¸¤·¤ÆÍî¤È¤µ¤ì¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ CENTER:&ref(./02_04.png,); CENTER:¿Þ2-4~ ~ ~ ¡¡¤³¤ì¤ÏANR¡ÊApplication Not Responding¡Ë¤È¸Æ¤Ð¤ì¡¢Android¤Î¥Ý¥ê¥·¡¼¤Ë¤è¤êȯÀ¸¤¹¤ë¸½¾Ý¤Ç¤¹¡£ ¡¡Android¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÏÄ̾Æä˲¿¤â°Õ¼±¤»¤º¤ËºîÀ®¤·¤¿¾ì¹ç¡¢UI¤ÎÉÁ²è¤ò´Þ¤àÁ´¤Æ¤Î½èÍý¤¬¥á¥¤¥ó¥¹¥ì¥Ã¥É¤È¸Æ¤Ð¤ì¤ëñ°ì¤Î¥¹¥ì¥Ã¥É¤ÇÆ°ºî¤·¤Þ¤¹¡£°ìÊý¤Ç¡¢Android¤Ï¤³¤Î¥á¥¤¥ó¥¹¥ì¥Ã¥É¤¬5Éðʾå±þÅú¤·¤Ê¤¤¾ì¹ç¡¢Àè¤ÎANR¤ò°ú¤µ¯¤³¤·¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¶¯À©Åª¤Ë½ªÎ»¤µ¤»¤è¤¦¤È¤·¤Þ¤¹¡£ ¡¡Android¤Ï¸µ¡¹¥¹¥Þ¡¼¥È¥Õ¥©¥óÍѤÎOS¤È¤·¤Æ³«È¯¤µ¤ì¤¿¤¿¤á¡¢¥·¥¹¥Æ¥àÁ´ÂΤΥ쥹¥Ý¥ó¥¹¤òÂè°ì¤Ë¹Í¤¨¤ÆÀ߷פµ¤ì¤Æ¤¤¤Þ¤¹¡£¤³¤Î¤¿¤á¡¢Ä¹»þ´Ö±þÅú¤ò»ß¤á¤Æ¤·¤Þ¤¦¤è¤¦¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ïµö¤µ¤ì¤Þ¤»¤ó¡£²¾¤Ë¤½¤Î¤è¤¦¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤¿¾ì¹ç¤Ç¤â¡¢¥·¥¹¥Æ¥à¦¤Ç¶¯À©Åª¤Ë»ß¤á¤é¤ì¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¡¢ÅÅÏ䬤«¤«¤Ã¤Æ¤¤¿¤Î¤Ë½Ð¤é¤ì¤Ê¤¤¡¢¤È¤¤¤Ã¤¿Ã×̿Ū¤ÊÌäÂ꤬µ¯¤¤Ê¤¤¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ç¤¹¡£ ¡¡¤Þ¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥óñÂΤǹͤ¨¤Æ¤â¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ë»þ´Ö¤Î¤«¤«¤ë½èÍý¤ò¹Ô¤ï¤»¤ë¤È¡Ö¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤âÈ¿±þ¤¬Ìµ¤¤¡×¡ÖĹ»þ´Ö²èÌ̤¬¸Ç¤Þ¤ë¡×¤È¤¤¤Ã¤¿°õ¾Ý¤ò¥æ¡¼¥¶¡¼¤ËÍ¿¤¨¤«¤Í¤Ê¤¤¤Î¤ÇÈò¤±¤ë¤Ù¤¤Ç¤·¤ç¤¦¡£ ¡¡¤³¤¦¤·¤¿ÌäÂê¤òÈò¤±¤ë¤¿¤á¡¢»þ´Ö¤Î¤«¤«¤ë½èÍý¤Ï¥á¥¤¥ó¥¹¥ì¥Ã¥É¤È¤ÏʬΥ¤·¡¢¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¼Â¹Ô¤¹¤ëɬÍפ¬½Ð¤Æ¤¤Þ¤¹¡£¤½¤³¤Ç¤³¤³¤«¤é¤ÏÀè¤Û¤ÉºîÀ®¤·¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¡¢¥¯¥ê¥Ã¥¯»þ¤Ë¹Ô¤¦½èÍý¤òÊÌ¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤¹¤ë¤è¤¦½¤Àµ¤·¤Æ¤¤¤¤Þ¤¹¡£¥ê¥¹¥È2-7¤¬onClickÆâ¤Î½èÍý¤òÊÌ¥¹¥ì¥Ã¥É²½¤·¤¿Êª¤Ë¤Ê¤ê¤Þ¤¹¡£ -¥ê¥¹¥È2-7 : public void onClick(View view) { if (view.getId() == R.id.FindButton) { Thread t = new Thread() { @Override public void run() { EditText text; text = (EditText) findViewById(R.id.FindTarget); String target = text.getText().toString(); if (target.equals("") != true) { mList.clear(); listFile(target, "/", mList); if (mList.size() > 0) { String tmp = ""; for (int i = 0; i < mList.size(); ++i) { tmp += mList.get(i) + "\n"; } text = (EditText) findViewById(R.id.Result); text.setText(tmp); } } } }; t.start(); } } ~ ¡¡onClick¤ÇFindButton¤«¤É¤¦¤«³Îǧ¤·¤¿¸å¡¢Thread¥¯¥é¥¹¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¡¢¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤¿run¥á¥½¥Ã¥É¤ÎÃæ¤Ë¸¡º÷½èÍý¤ò°Ü¤·¤Æ¤¤¤Þ¤¹¡£¥¹¥ì¥Ã¥É¤Îstart¥á¥½¥Ã¥É¤Ë¤è¤êÊÌ¥¹¥ì¥Ã¥É¤¬³«»Ï¤µ¤ì¤Æ¡¢run¥á¥½¥Ã¥É¤¬¤½¤³¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£~ ¡¡»þ´Ö¤Î¤«¤«¤ë½èÍý¤¬ÊÌ¥¹¥ì¥Ã¥É¤Ë°ÜÆ°¤·¤¿¤¿¤á¡¢¸¡º÷¥Ü¥¿¥ó¤ò²¡¤¹¤È¤¹¤°²èÌÌÁàºî¤¬¹Ô¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£¤·¤«¤·¡¢Android¤Ç¤ÏUI¤Ë´Ø¤ï¤ëÉÁ²è½èÍý¤Ï¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¤·¤«¹Ô¤¨¤Ê¤¤¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤¿¤á¡¢Result¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤Ë·ë²Ì¤ò¥»¥Ã¥È¤¹¤ëºÝ¤Ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥¨¥é¡¼¤¬µ¯¤¤Æ¤·¤Þ¤¤¤Þ¤¹¡Ê¿Þ2-5¡Ë¡£ CENTER:&ref(./02_05.png,); CENTER:¿Þ2-5~ ~ ~ ¡¡»þ´Ö¤Î¤«¤«¤ë½èÍý¤ÏÊÌ¥¹¥ì¥Ã¥É¤Ç¹Ô¤ï¤»¤Ä¤Ä¡¢½èÍý¤¬´°Î»¤·¤¿¸å¤ÎÉÁ²è½èÍý¤ò¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤Ë¤Ï¤¤¤¯¤Ä¤«¤Î²ò·èË¡¤¬¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤³¤Ç¤ÏHandler¥¯¥é¥¹¤Îpost¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤Þ¤¹¡£~ ¡¡Handler¥¯¥é¥¹¤òÍøÍѲÄǽ¤Ë¤¹¤ë¤¿¤á¡¢android.os.Bundle¤Î¥¤¥ó¥Ý¡¼¥È¹Ô¤Î¸å¤Ë°Ê²¼¤òÄɲä·¤Þ¤¹¡£ import android.os.Handler; ¡¡FFindActivity¤Îprivate¥á¥ó¥Ð¤Ë·ë²Ìɽ¼¨ÍѤÎString¤ÈHandler¥¯¥é¥¹¤òÄɲä·¤Þ¤¹¡£ private String mResult; private Handler mHandler = new Handler(); ¡¡onClick¤Î¤¦¤ÁUI¤òÁàºî¤¹¤ëɬÍפ¬¤¢¤ë²Õ½ê¤ò½¤Àµ¤·¤Þ¤¹¡Ê¥ê¥¹¥È2-8¡Ë¡£ -¥ê¥¹¥È2-8 : public void onClick(View view) { if (view.getId() == R.id.FindButton) { Thread t = new Thread() { @Override public void run() { EditText text; text = (EditText) findViewById(R.id.FindTarget); String target = text.getText().toString(); if (target.equals("") != true) { mList.clear(); listFile(target, "/", mList); if (mList.size() > 0) { mResult = ""; for (int i = 0; i < mList.size(); ++i) { mResult += mList.get(i) + "\n"; } mHandler.post(new Runnable() { @Override public void run() { EditText text = (EditText) findViewById(R.id.Result); text.setText(mResult); } }); } } } }; t.start(); } } ~ ¡¡¸¡º÷·ë²Ì¤Î¥µ¥¤¥º¤ò³Îǧ¤·¤¿¸å¡¢¥ê¥¹¥ÈÆâ¤Î¥Ç¡¼¥¿¤ò·ë²Ìɽ¼¨ÍÑʸ»úÎó¤Ë³ÊǼ¤·¡¢Handler¤Îpost¥á¥½¥Ã¥É¤ÇRunnable¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¥¯¥é¥¹¤ò¥á¥¤¥ó¥¹¥ì¥Ã¥É¤ËÁ÷¿®¤·¤Æ¤¤¤Þ¤¹¡£Runnable¤ò¼õ¿®¤·¤¿¥á¥¤¥ó¥¹¥ì¥Ã¥É¤¬¤³¤Îrun¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¡¢Æ±¥á¥½¥Ã¥ÉÆâ¤Ë¼ÂÁõ¤µ¤ì¤¿½èÍý¤ò¼Â¹Ô¤·¤Þ¤¹¡£ ¡¡¤³¤ì¤Ç»þ´Ö¤Î¤«¤«¤ë¸¡º÷½èÍý¤òÊÌ¥¹¥ì¥Ã¥É¤ËÄɤ¤½Ð¤·¡¢¸¡º÷½ªÎ»¸å¤Ë¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç·ë²Ìɽ¼¨¤ò¹Ô¤¦¤³¤È¤¬½ÐÍè¤Þ¤·¤¿¡£ **2-6. AsyncTask¤Ë¤è¤ë¥Þ¥ë¥Á¥¹¥ì¥Ã¥É½èÍý [#mf2fe384] ¡¡Á°¹à¤Ç¤ÏThread¤ÈHandler¤ò»ÈÍѤ·¤Æ»þ´Ö¤Î¤«¤«¤ë½èÍý¤ò¥á¥¤¥ó¥¹¥ì¥Ã¥É¤«¤éʬΥ¤·¤Þ¤·¤¿¤¬¡¢Android¤Ç¤Ï¤³¤¦¤·¤¿½èÍý¤ÎÀÚ¤êʬ¤±¤ò´Êñ¤Ë¼ÂÁõ¤¹¤ë¤³¤È¤Î½ÐÍè¤ëAsyncTask¤È¤¤¤¦¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥¯¥é¥¹¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£FFind¤ò¤³¤ÎAsyncTask¤òÍøÍѤ·¤¿Êª¤Ëºî¤êÂؤ¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£ ¡¡AsyncTask¤Ë¤Ï¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¹Ô¤¦É¬Íפ¬¤¢¤ë½èÍý¤ò¼ÂÁõ¤¹¤ë¥á¥½¥Ã¥É¤ä¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î´°Î»¸å¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¥á¥½¥Ã¥É¤¬ÍÑ°Õ¤µ¤ì¤Æ¤ª¤ê¡¢¤³¤ì¤é¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤¹¤ë¤³¤È¤ÇÈóƱ´ü½èÍý¤ò´Êñ¤Ë¼Â¸½½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ÂåɽŪ¤Êʪ¤ò°Ê²¼¤Ëµó¤²¤Æ¤¤¤¤Þ¤¹¡£ -onPreExecute --¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î¼Â¹ÔÁ°¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ëÁ°½èÍýÍѤΥ᥽¥Ã¥É¤Ç¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ -doInBackground --¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍýÍѤΥ᥽¥Ã¥É¤Ç¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤È¤ÏÊÌ¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ -onProgressUpdate --¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î¿Ê¹Ô¾õ¶·¹¹¿·»þ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¥á¥½¥Ã¥É¤Ç¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ -onPostExecute --¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î´°Î»¸å¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¸å½èÍýÍѤΥ᥽¥Ã¥É¤Ç¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ ¡¡¤³¤³¤«¤é¤Ï¼ÂºÝ¤ËAsyncTask¤Î¥µ¥Ö¥¯¥é¥¹¤òºîÀ®¤·¡¢FFind¤ËɬÍפʽèÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤¤Þ¤¹¡£Eclipse¤ÎPackage Explorer¤ÇFFind¤ò¥¯¥ê¥Ã¥¯¤·¤ÆÁªÂò¤·¡¢¥á¥Ë¥å¡¼¤«¤é¡ÖFile > New > Class¡×¤òÁªÂò¤·¤Þ¤¹¡£ CENTER:&ref(./02_06.png,); CENTER:¿Þ2-6~ ~ ~ ¡¡¿Þ2-6¤Î¥À¥¤¥¢¥í¥°¤¬É½¼¨¤µ¤ì¤¿¤é¡¢Package¤Ë¡Öcom.beatcraft.ffind¡×¡¢Name¤Ë¡ÖFindTask¡×¡¢Superclass¤Ë¡Öandroid.os.AsyncTask<String, Integer, Void>¡×¤ÈÆþÎϤ·¤Æ¡ÖFinish¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Þ¤¹¡£¤³¤ì¤ÇFindTask.java¤È¤¤¤¦Java¥½¡¼¥¹¥³¡¼¥É¤¬¼«Æ°À¸À®¤µ¤ì¡¢FFind¤Î¥×¥í¥¸¥§¥¯¥È¤ËÄɲ䵤ì¤Þ¤¹¡£ ¡¡Superclass¤ÎÍó¤ËÆþÎϤ·¤¿Ä̤ꡢAsyncTask¤Ï3¤Ä¤Î·¿¤ò»ØÄꤹ¤ë¥Æ¥ó¥×¥ì¡¼¥È¥¯¥é¥¹¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢1¤Ä¤á¤ÏdoInBackground¥á¥½¥Ã¥É¤Î°ú¿ô¤Î·¿¡¢2¤Ä¤á¤ÏonProgressUpdate¥á¥½¥Ã¥É¤Î°ú¿ô¤Î·¿¡¢3¤Ä¤á¤ÏonPostExecute¥á¥½¥Ã¥É¤Î°ú¿ô¤Î·¿¤ò»ØÄꤷ¤Þ¤¹¡£ ¡¡ºîÀ®¤µ¤ì¤¿FindTask.java¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤¡¢¥á¥ó¥ÐÊÑ¿ô¤È¥³¥ó¥¹¥È¥é¥¯¥¿¤òÄɲä·¤Þ¤¹¡Ê¥ê¥¹¥È2-9¡Ë¡£ -¥ê¥¹¥È2-9 : private FFindActivity mActivity; public FindTask(FFindActivity activity) { mActivity = activity; } ~ ¡¡¸¡º÷½èÍý¤È·ë²Ì¤ÎÈ¿±Ç¤òFFindActivity¤Ç¹Ô¤¦¤¿¤á¡¢¤³¤ì¤òÊÝ»ý¤¹¤ë¤¿¤á¤ÎÊÑ¿ô¤òÄɲ䷤Ƥ¤¤Þ¤¹¡£¥³¥ó¥¹¥È¥é¥¯¥¿¤ÇFFindActivity¤ò°ú¿ô¤Ë¼è¤ê¡¢Äɲä·¤¿ÊÑ¿ô¤Ë³ÊǼ¤·¤Þ¤¹¡£~ ¡¡Â³¤¤¤ÆdoInBackground¤Î½èÍý¤ò¼ÂÁõ¤·¤Þ¤¹¡Ê¥ê¥¹¥È2-10¡Ë¡£ -¥ê¥¹¥È2-10 : @Override protected Void doInBackground(String... arg0) { String target = arg0[0]; mActivity.listFile(target); return null; } ~ ¡¡doInBackground¤Î°ú¿ô¤Ï¥Æ¥ó¥×¥ì¡¼¥È¤Ç»ØÄꤷ¤¿·¿¤Î²ÄÊÑĹ°ú¿ô¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤³¤«¤é°ì¤ÄÌܤÎÍ×ÁǤò¼è¤ê½Ð¤·¡¢¸¡º÷¥¡¼¥ï¡¼¥É¤È¤·¤ÆFFindActivity¤ÎlistFile¥á¥½¥Ã¥É¤ËÅϤ·¤Æ¤¤¤Þ¤¹¡£¤³¤³¤Ç¸Æ¤Ó½Ð¤·¤Æ¤¤¤ëlistFile¥á¥½¥Ã¥É¤Ï¤³¤ì¤Þ¤Ç¤Ë¼ÂÁõ¤·¤¿¸¡º÷¥á¥½¥Ã¥É¤Ç¤Ï¤Ê¤¯FindTask¤«¤é¸¡º÷½èÍý¤ò¸Æ¤Ó½Ð¤¹¤¿¤á¤ËÍøÍѤ¹¤ë¤â¤Î¤Ç¡¢¤³¤Î¸å¤Ç¼ÂÁõ¤·¤Æ¤¤¤¤Þ¤¹¡Ê°ú¿ô¤¬°Û¤Ê¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡Ë¡£~ ¡¡°ú¤Â³¤onPostExecute¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Þ¤¹¡Ê¥ê¥¹¥È2-11¡Ë¡£ -¥ê¥¹¥È2-11 : @Override protected void onPostExecute(Void v) { mActivity.result(); mActivity = null; } ~ ¡¡onPostExecute¤Ï¸¡º÷¤¬´°Î»¤·¤¿ºÝ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¤Î¤Ç¡¢FFindActivity¤Îresult¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Æ¸¡º÷·ë²Ì¤ÎÈ¿±Ç¤ò¹Ô¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡Êresult¥á¥½¥Ã¥É¤Ï¸å¤Û¤É¼ÂÁõ¤·¤Þ¤¹¡Ë¡£ ¡¡°Ê¾å¤ÇFindTask¤Î¼ÂÁõ¤Ï¤Ò¤È¤Þ¤º´°Î»¤Ç¤¹¡£Â³¤¤¤ÆFFindActivity¤ò¡¢¤³¤ÎFindTask¤òÍøÍѤ·¤¿·Á¤Ë½¤Àµ¤·¤Æ¤¤¤¤Þ¤¹¡£FindButton¤ËOnClickListener¤òÀßÄꤹ¤ëºÝ¤ÎonClick¤ò¡¢°Ê²¼¤Î¤è¤¦¤Ë½¤Àµ¤·¤Þ¤¹¡Ê¥ê¥¹¥È2-12¡Ë¡£ -¥ê¥¹¥È2-12 : public void onClick(View view) { if (view.getId() == R.id.FindButton) { EditText text; text = (EditText) findViewById(R.id.FindTarget); String target = text.getText().toString(); if (target.equals("") == false) { mList.clear(); FindTask task = new FindTask(FFindActivity.this); task.execute(target); } } } ~ ¡¡¥¡¼¥ï¡¼¥É¤¬¶õ¤Ç¤Ê¤«¤Ã¤¿¾ì¹çFindTask¤òÀ¸À®¤·¡¢execute¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¤Æ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤ò³«»Ï¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î»þ¡¢execute¥á¥½¥Ã¥É¤ËÅϤ·¤¿°ú¿ô¤¬doInBackground¤Ë°ú¤ÅϤµ¤ì¤Þ¤¹¡£Thread¤ÈHandler¤Ç¹Ô¤Ê¤Ã¤Æ¤¤¤¿½èÍý¤òAsyncTask¤ËÅý¹ç¤·¤¿¤¿¤á¡¢Èó¾ï¤Ë¤¹¤Ã¤¤ê¤È¤·¤¿µ½Ò¤Ë¤Ê¤ê¤Þ¤·¤¿¡£¥á¥ó¥ÐÊÑ¿ô¤ÎmHandler¤ÏÉÔÍפȤʤ俤Τǡ¢¤³¤Á¤é¤ÎÀë¸À¤È¥Ñ¥Ã¥±¡¼¥¸¥¤¥ó¥Ý¡¼¥È¤âºï½ü¤·¤Æ¤ª¤¤Þ¤¹¡£ ¡¡FindTask¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë¸¡º÷½èÍý¤È·ë²Ìɽ¼¨¤Î¥á¥½¥Ã¥É¤òÄɲä·¤Þ¤¹¡£ -¥ê¥¹¥È2-13 : public void listFile(String target) { listFile(target, "/", mList); if (mList.size() > 0) { mResult = ""; for (int i = 0; i < mList.size(); ++i) { mResult += mList.get(i) + "\n"; } } } public void result() { if (mList.size() > 0) { EditText text = (EditText) findViewById(R.id.Result); text.setText(mResult); } else { Toast.makeText(this, "* NOT FOUND *", Toast.LENGTH_SHORT).show(); } } ~ ¡¡FindTask¤ÎdoInBackground¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤¿listFile¥á¥½¥Ã¥É¤Ç¤Ï¡¢ÅϤµ¤ì¤¿¥¡¼¥ï¡¼¥É¤ò¸¡º÷Âоݡ¢¥ë¡¼¥È¥Õ¥©¥ë¥À¡Ê"/"¡Ë¤ò¸¡º÷³«»Ï¥Õ¥©¥ë¥À¤È¤·¤Æ¼ÂºÝ¤Î¸¡º÷½èÍý¤ò¸Æ¤Ó½Ð¤·¤¿¤¢¤È¡¢·ë²Ì³ÊǼÍѤÎString¤ËÀ°·Á¤·¤Æ³ÊǼ¤·¤Æ¤¤¤Þ¤¹¡£doInBackground¤Ï¥á¥¤¥ó¥¹¥ì¥Ã¥É¤È¤ÏÊ̤Υ¹¥ì¥Ã¥É¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ë¤¿¤á¡¢¤³¤Î½èÍý¤¬Ä¹»þ´Ö¤«¤«¤Ã¤Æ¤â¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬ANR¤ÇÄä»ß¤µ¤ì¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ¡¡FindTask¤ÎonPostExecute¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤¿result¥á¥½¥Ã¥É¤Ç¤Ï¸¡º÷·ë²Ì¤Îʸ»úÎó¤òResult¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£onPostExecute¤Ï¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¸Æ¤Ó½Ð¤µ¤ì¤ë¤¿¤á¡¢EditText¤ÎsetText¤ò¼Â¹Ô¤·¤Æ¤â¥¨¥é¡¼¤¬µ¯¤¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£ ¡¡¤Þ¤¿¡¢¸¡º÷·ë²Ì¤¬0·ï¤À¤Ã¤¿¾ì¹ç²¿¤âɽ¼¨¤·¤Ê¤¤¤Î¤Ï¤ï¤«¤ê¤Å¤é¤¤¤¿¤á¡¢Toast¤ò»ÈÍѤ·¤ÆÄÌÃΤ¹¤ë¤è¤¦¤Ë¤·¤Þ¤·¤¿¡Ê¿Þ2-7¡Ë¡£Toast¤Ï¥æ¡¼¥¶¡¼¤«¤é¤Î¥ì¥¹¥Ý¥ó¥¹¤òɬÍפȤ·¤Ê¤¤´Êñ¤Ê¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¥Ý¥Ã¥×¥¢¥Ã¥×¥À¥¤¥¢¥í¥°¤Ç¡¢ÆÃÄê¤Î½èÍý¤òÄ̲ᤷ¤¿ºÝ¤Ëɽ¼¨¤¹¤ë¤Ê¤É´Ê°×¥Ç¥Ð¥Ã¥°¥Ä¡¼¥ë¤È¤·¤Æ¤âÍøÍѽÐÍè¤Þ¤¹¡Ê⤷¡¢Toast¤â¥á¥¤¥ó¥¹¥ì¥Ã¥É¤«¤é¤Ç¤Ê¤±¤ì¤ÐÍøÍѽÐÍè¤Ê¤¤¤¿¤áÃí°Õ¤¬É¬ÍפǤ¹¡Ë¡£~ ¡¡¾°¡¢Toast¤Î»ÈÍѤˤÏandroid.widget.Toast¥Ñ¥Ã¥±¡¼¥¸¤Î¥¤¥ó¥Ý¡¼¥È¤¬É¬ÍפǤ¹¡£ ~ CENTER:&ref(./02_07.png,); CENTER:¿Þ2-7~ ~ ~ ¡¡FFind¤ÎAsyncTask²½¤Ï¤³¤ì¤Ç´°Î»¤Ç¤¹¤¬¡¢¤è¤ê¤ï¤«¤ê¤ä¤¹¤¯¡¢¸¡º÷Ãæ¤Ï¥×¥í¥°¥ì¥¹¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£ ¡¡FFindTask.java¤ò³«¤¡¢¥×¥í¥°¥ì¥¹¥À¥¤¥¢¥í¥°¤Î¥Ñ¥Ã¥±¡¼¥¸¤ò¥¤¥ó¥Ý¡¼¥È¤·¤Þ¤¹¡£ import android.app.ProgressDialog; ¡¡¥×¥í¥°¥ì¥¹¥À¥¤¥¢¥í¥°¤ò¥á¥ó¥ÐÊÑ¿ô¤ËÄɲä·¤Þ¤¹¡£ private ProgressDialog mDialog; ¡¡onPreExecute¥á¥½¥Ã¥É¤òÄɲä·¡¢¥×¥í¥°¥ì¥¹¥À¥¤¥¢¥í¥°¤ÎÀ¸À®¤Èɽ¼¨¤ò¹Ô¤¤¤Þ¤¹¡Ê¥ê¥¹¥È2-14¡Ë¡£ -¥ê¥¹¥È2-14 : @Override protected void onPreExecute() { mDialog = new ProgressDialog(mActivity); mDialog.setMessage(mActivity.getString(R.string.find_progress)); mDialog.show(); } ~ ¡¡¥À¥¤¥¢¥í¥°¤ÎsetMessage¥á¥½¥Ã¥É¤Ï¥À¥¤¥¢¥í¥°¤Ëɽ¼¨¤¹¤ë¥á¥Ã¥»¡¼¥¸¤òÀßÄꤹ¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£¤³¤³¤Ç»ØÄꤷ¤Æ¤¤¤ëR.string.find_progress¤Ï¸å¤Û¤Éʸ»úÎó¥ê¥½¡¼¥¹¤ËÄɲä·¤Þ¤¹¡£ ¡¡onPostExecute¥á¥½¥Ã¥É¤ò½¤Àµ¤·¡¢¥×¥í¥°¥ì¥¹¥À¥¤¥¢¥í¥°¤ò¾Ãµî¤·¤Þ¤¹¡Ê¥ê¥¹¥È2-15¡Ë¡£ -¥ê¥¹¥È2-15 : @Override protected void onPostExecute(Void v) { mDialog.dismiss(); mDialog = null; mActivity.result(); mActivity = null; } ~ ¡¡¥ê¥½¡¼¥¹¤Îstrings.xml¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤¡¢°Ê²¼¤Îʸ»úÎó¥ê¥½¡¼¥¹¤òÄɲä·¤Þ¤¹¡£ <string name="find_progress">¸¡º÷Ãæ...</string> ¡¡°Ê¾å¤Ç½¤Àµ¤Ï´°Î»¤Ç¤¹¡£¸¡º÷Ãæ¤Ï¿Þ2-8¤Î¤è¤¦¤Ê¥À¥¤¥¢¥í¥°¤¬É½¼¨¤µ¤ì¡¢¸¡º÷¤¬½ªÎ»¤¹¤ë¤È¼«Æ°Åª¤Ë¾Ã¤¨¤ë¤³¤È¤ò³Îǧ¤·¤Æ²¼¤µ¤¤¡£ CENTER:&ref(./02_08.png,); CENTER:¿Þ2-8~ ~ ~ ¡¡¥×¥í¥°¥ì¥¹¥À¥¤¥¢¥í¥°¤Ï¸½ºß¤Î¿ÊĽ¾õ¶·¤ò¥Ð¡¼¤Ç¼¨¤¹¤Ê¤É¡¢¤¤¤¯¤Ä¤«¤Î¥¹¥¿¥¤¥ë¤¬»ÈÍѲÄǽ¤Ç¤¹¡£AsyncTask¤ÎonProgressUpdate¥á¥½¥Ã¥ÉÆâ¤Ç¥À¥¤¥¢¥í¥°¤Î¿ÊĽ¾õ¶·¤ò¹¹¿·¤·¡¢doInBackground¤Ç¤Î½èÍý¿Ê¹Ô¾õ¶·¤Ë±þ¤¸¤ÆpublishProgress¥á¥½¥Ã¥É¤òŬµ¹¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¡¢¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î¿ÊĽ¤Ë±þ¤¸¤¿É½¼¨¤¬¹Ô¤¨¤Þ¤¹¡£ ~ ~ **2-7. ¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤ÎÁ«°Ü [#v5875d61] ¡¡¤³¤³¤«¤é¤ÏFFind¤Î²þ½¤¤ò¹¹¤Ë¿Ê¤á¤Æ¡¢¸¡º÷·ë²Ì¤òÊÌ¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Ëɽ¼¨¤·¡¢·ë²Ìɽ¼¨¤â¥ê¥¹¥È¥Ó¥å¡¼¤ò»ÈÍѤ·¤¿Êª¤ËÀ°¤¨¤Æ¤¤¤¤Þ¤¹¡£ ¡¡¤Þ¤º¤Ï·ë²Ìɽ¼¨ÍѤΥ¢¥¯¥Æ¥£¥Ó¥Æ¥£¤òÍÑ°Õ¤·¤Þ¤¹¡£Eclipse¤ÎPackage Explorer¤ÇFFind¤ò¥¯¥ê¥Ã¥¯¤·¤ÆÁªÂò¤·¡¢¥á¥Ë¥å¡¼¤«¤é¡ÖFile > New > Class¡×¤òÁªÂò¤·¤Þ¤¹¡£¥¯¥é¥¹ºîÀ®¥À¥¤¥¢¥í¥°¤¬É½¼¨¤µ¤ì¤¿¤é¡¢Package¤Ë¡Öcom.beatcraft.ffind¡×¡¢Name¤Ë¡ÖResultActivity¡×¡¢Superclass¤Ë¡Öandroid.app.Activity¡×¤ÈÆþÎϤ·¤Æ¡ÖFinish¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Þ¤¹¡£ ¡¡ºîÀ®¤µ¤ì¤¿ResultActivity.java¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤¡¢onCreate¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Æ¤¤¤¤Þ¤¹¡Ê¥ê¥¹¥È2-16¡Ë¡£Bundle¥¯¥é¥¹¤ò»ÈÍѲÄǽ¤Ë¤¹¤ë¤¿¤á¡¢android.os.Bundle¥Ñ¥Ã¥±¡¼¥¸¤Î¥¤¥ó¥Ý¡¼¥È¤â¹Ô¤Ê¤Ã¤Æ²¼¤µ¤¤¡£ -¥ê¥¹¥È2-16 : @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.result); } ~ ¡¡Â³¤¤¤Æ¤³¤Î¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Ç»ÈÍѤ¹¤ë¥ì¥¤¥¢¥¦¥È¡ÊR.layout.result¡Ë¤òºîÀ®¤·¤Þ¤¹¡£FFind¤ò¥¯¥ê¥Ã¥¯¤·¤ÆÁªÂò¤·¡¢¥á¥Ë¥å¡¼¤«¤é¡ÖFile > New > Other...¡×¤òÁªÂò¤·¤Þ¤¹¡£"Select a wizard"¥À¥¤¥¢¥í¥°¡Ê¿Þ2-9¡Ë¤¬É½¼¨¤µ¤ì¤¿¤é¡¢¡ÖAndroid > Android XML Layout File¡×¤òÁªÂò¤·¤Æ¡ÖNext¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ²¼¤µ¤¤¡£ CENTER:&ref(./02_09.png,); CENTER:¿Þ2-9~ ~ ~ ¡¡Â³¤¯"New Android Layout XML File"¤ÇFile¤Ë¡Öresult.xml¡×¤ÈÆþÎϤ·¡¢¡ÖFinish¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥ì¥¤¥¢¥¦¥È¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£~ ¡¡Package Explorer¤«¤éresult.xml¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤¡¢ºîÀ®¤µ¤ì¤¿¥ì¥¤¥¢¥¦¥È¤Ë¥ê¥¹¥È¥Ó¥å¡¼¤òÄɲä·¤Þ¤¹¡£Palette¤«¤éComposite¤ò¥¯¥ê¥Ã¥¯¤·¤ÆŸ³«¤·¡¢ListView¤ò¥É¥é¥Ã¥°¡õ¥É¥í¥Ã¥×¤ÇÇÛÃÖ¤·¤Þ¤¹¡£ListView¤Ï¹õÅɤê¤ÇÆä˲¿¤âɽ¼¨¤µ¤ì¤Ê¤¤¤¿¤á¤ï¤«¤ê¤Å¤é¤¤¤Î¤Ç¤¹¤¬¡¢CompositeÆâ¤Î°ìÈֺǽé¤Î¹àÌܤ¬ListView¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡Ê¿Þ2-10¡Ë¡£ CENTER:&ref(./02_10.png,); CENTER:¿Þ2-10~ ~ ~ ¡¡ÇÛÃÖ¤·¤¿¥ê¥¹¥È¥Ó¥å¡¼¤Î¥×¥í¥Ñ¥Æ¥£¤ò°Ê²¼¤Î¤è¤¦¤ËÀßÄꤷ¤Þ¤¹¡£ -Id¤Ë¡Ö@+id/Result¡×¤ÈÆþÎϤ·¤Þ¤¹¡£ -Layout height¤Ë¡Öfill_parent¡×¤ò»ØÄꤷ¤Þ¤¹¡£ -Layout width¤Ë¡Öfill_parent¡×¤ò»ØÄꤷ¤Þ¤¹¡£ ¡¡°Ê¾å¤ÇResult¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Î¥ì¥¤¥¢¥¦¥ÈºîÀ®¤Ï´°Î»¤Ç¤¹¡£Outline¤¬°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤ò³Îǧ¤·¤Æ²¼¤µ¤¤¡£ ¡¡¡¦LinearLayout~ ¡¡¡¡¡¦Result ¡¡Result¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Î¼ÂÁõ¤ò¿Ê¤á¤ëÁ°¤Ë¡¢FFindActivity¤Î½¤Àµ¤ò¹Ô¤¤¤Þ¤¹¡£FFindActivity¤Ç¤Ï·ë²Ìɽ¼¨¤ò¹Ô¤ï¤Ê¤¯¤Ê¤ë¤¿¤á¡¢¤Þ¤º¤Ï¥ì¥¤¥¢¥¦¥Èmain¤«¤éResult¥Æ¥¥¹¥È¥Ü¥Ã¥¯¥¹¤òºï½ü¤·¤Þ¤¹¡£ ¡¡¼¡¤ËFFindActivity.java¤ò³«¤¡¢¸¡º÷¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤µ¤ì¤¿ºÝ¤Î½èÍý¤òÊѹ¹¤·¤Þ¤¹¡Ê¥ê¥¹¥È2-17¡Ë¡£ -¥ê¥¹¥È2-17 : @Override public void onClick(View view) { if (view.getId() == R.id.FindButton) { EditText text; text = (EditText) findViewById(R.id.FindTarget); String target = text.getText().toString(); if (target.equals("") == false) { Intent intent = new Intent(getApplicationContext(), com.beatcraft.ffind.ResultActivity.class); intent.putExtra("Target", target); startActivity(intent); } } } ~ ¡¡FindTask¤òÀ¸À®¤·¡¢¸¡º÷½èÍý¤ò¼Â¹Ô¤·¤Æ¤¤¤¿²Õ½ê¤¬Êѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£Intent¤Ï¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤ä¥¢¥×¥ê¥±¡¼¥·¥ç¥ó´Ö¤Ç¾ðÊó¤ò¤ä¤ê¼è¤ê¤¹¤ë¤¿¤á¤Î¥á¥Ã¥»¡¼¥¸¥ª¥Ö¥¸¥§¥¯¥È¡Ö¥¤¥ó¥Æ¥ó¥È¡×¤ò¼è¤ê°·¤¦¥¯¥é¥¹¤Ç¡¢¤³¤³¤Ç¤ÏFFindActivity¤«¤éResultActivity¤ò¸Æ¤Ó½Ð¤¹¤¿¤á¤Ë»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£ÆóÈÖÌܤΰú¿ô¤Ë¡Öcom.beatcraft.ffind.ResultActivity.class¡×¤ÈÅϤ¹¤³¤È¤Ç¡¢¤³¤Î¥¤¥ó¥Æ¥ó¥È¤ÎÁ÷¿®Àè¤òÌÀ¼¨Åª¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£~ ¡¡Â³¤¯putExtra¥á¥½¥Ã¥É¤Ç¤Ï¡¢¥¤¥ó¥Æ¥ó¥È¤òÁ÷¿®¤¹¤ëºÝ¤ËźÉÕ¤¹¤ë¾ðÊó¤òÄɲ䷤Ƥ¤¤Þ¤¹¡£¤³¤³¤Ç¤Ï¸¡º÷¥¡¼¥ï¡¼¥É¤Ç¤¢¤ëʸ»úÎótarget¤ò¡¢¡ÖTarget¡×¤È¤¤¤¦Ì¾Á°¤ò¤Ä¤±¤ÆźÉÕ¤·¤Æ¤¤¤Þ¤¹¡£~ ¡¡ºÇ¸å¤ËstartActivity¤Ç¥¤¥ó¥Æ¥ó¥È¤òÁ÷¿®¤·¡¢ResultActivity¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡£ ¡¡¤³¤ì¤Þ¤ÇFFindActivity¤Ç¹Ô¤Ê¤Ã¤Æ¤¤¤¿¸¡º÷½èÍý¤È·ë²Ìɽ¼¨¤ÏResultActivity¤Ç¹Ô¤¦¤¿¤á¡¢°Ê²¼¤Î¥á¥ó¥ÐÊÑ¿ô¤È3¤Ä¤Î¥á¥½¥Ã¥É¤òFFindActivity¤«¤é¤Ïºï½ü¤·¡¢ResultActivity¤Ë°ÜÆ°¤·¤Þ¤¹¡£FFindActivity¤ÎonCreate¤Ç¹Ô¤Ê¤Ã¤Æ¤¤¤¿mList¤ÎÀ¸À®½èÍý¤ÈString¥á¥ó¥ÐÊÑ¿ômResult¤âÉÔÍפȤʤ뤿¤á¤¢¤ï¤»¤Æºï½ü¤·¤Æ²¼¤µ¤¤¡£ private ArrayList<String> mList; public void listFile(String target) public void result() private void listFile(String target, String folder, ArrayList<String> list) ¡¡¤³¤ì¤ÇFFindActivity.java¤Î½¤Àµ¤Ï´°Î»¤Ç¤¹¡£Â³¤¤¤ÆResultActivity.java¤ò³«¤¡¢É¬ÍפʽèÍý¤ÎÄɲäÈFFindActivity¤«¤é°Ü¿¢¤·¤¿¥á¥½¥Ã¥É¤Î½¤Àµ¤ò¹Ô¤¤¤Þ¤¹¡£ ¡¡¤Þ¤º¤ÏonCreate¤ò½¤Àµ¤·¤Þ¤¹¡£setContentView¸Æ¤Ó½Ð¤·¤Î¤¢¤È¤Ë¡¢¼¡¤ÎÆâÍƤòÄɲä·¤Þ¤¹¡Ê¥ê¥¹¥È2-18¡Ë¡£ -¥ê¥¹¥È2-18 : mList = new ArrayList<String>(); Intent intent = getIntent(); if (intent == null) { finish(); } String target = intent.getStringExtra("Target"); FindTask task = new FindTask(this); task.execute(target); ~ ¡¡ºÇ½é¤ËFFindActivity¤«¤é°ú¤·Ñ¤¤¤ÀArrayList¤ÎÀ¸À®¤ò¹Ô¤Ê¤Ã¤¿¤¢¤È¡¢Â³¤¯getIntent¥á¥½¥Ã¥É¤Ç¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¸Æ¤Ó½Ð¤·»þ¤ËÁ÷¿®¤µ¤ì¤¿¥¤¥ó¥Æ¥ó¥È¤ò¼èÆÀ¤·¤Æ¤¤¤Þ¤¹¡£¤³¤Î¥¤¥ó¥Æ¥ó¥È¤«¤é¸¡º÷¥¡¼¥ï¡¼¥É¤ò¼õ¤±¼è¤ë¤¿¤á¡¢¤ß¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¤Ïfinish¥á¥½¥Ã¥É¤Ç¤³¤Î¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤ò½ªÎ»¤µ¤»¤Þ¤¹¡£~ ¡¡getStringExtra¤Ï¥¤¥ó¥Æ¥ó¥È¤«¤éʸ»úÎ󥿥¤¥×¤ÎźÉեǡ¼¥¿¤ò¼èÆÀ¤¹¤ë¥á¥½¥Ã¥É¤Ç¡¢¤³¤³¤Ç¤Ï¡ÖTarget¡×¤È¤¤¤¦Ì¾Á°¤ÎźÉեǡ¼¥¿¤ò¼èÆÀ¤·¡¢¤³¤ì¤ò¥¡¼¥ï¡¼¥É¤È¤·¤ÆFindTask¤Î¥Õ¥¡¥¤¥ë¸¡º÷¤ò¼Â¹Ô¤·¤Æ¤¤¤Þ¤¹¡£ ¡¡FindTask¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤ëlistFile¤Ïprivate¤ÎlistFile¥á¥½¥Ã¥É¤Î¤ß¤ËÊѹ¹¤·¤Þ¤¹¡Ê¥ê¥¹¥È2-19¡Ë¡£ -¥ê¥¹¥È2-19 : public void listFile(String target) { listFile(target, "/", mList); } ~ ¡¡result¥á¥½¥Ã¥É¤Ç¤Ï·ë²Ì¤ÎÀßÄê¤òEditText¤«¤éListView¤Îʪ¤ØÊѹ¹¤ò¹Ô¤¤¤Þ¤¹¡Ê¥ê¥¹¥È2-20¡Ë¡£ -¥ê¥¹¥È2-20 : public void result() { if (mList.size() > 0) { ListView lv = (ListView) findViewById(R.id.Result); String sa[] = new String[mList.size()]; for (int i = 0; i < mList.size(); ++i) { sa[i] = mList.get(i); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, sa); lv.setAdapter(adapter); } else { Toast.makeText(this, "* NOT FOUND *", Toast.LENGTH_SHORT).show(); } } ~ ¡¡ListView¤Ï¥¢¥À¥×¥¿¡¼¤È¸Æ¤Ð¤ì¤ë¥¯¥é¥¹¤Ç¥ê¥¹¥È¥Ç¡¼¥¿¤È·ë¤ÓÉÕ¤±¤é¤ì¤Þ¤¹¡£¥¢¥À¥×¥¿¡¼¤Ë¤Ï¤¤¤í¤¤¤í¤Ê¼ïÎब¤¢¤ê¤Þ¤¹¤¬¡¢¤³¤³¤Ç¤Ïʸ»úÎóÇÛÎó¤ò¼è¤ê°·¤¦¤¿¤á¡¢ÇÛÎóÍÑ¥¢¥À¥×¥¿¡¼¤Î¥Æ¥ó¥×¥ì¡¼¥È¥¯¥é¥¹ArrayAdapter¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£~ ¡¡ArrayAdapter¤Ç¤Ï¥ê¥¹¥È¥Ó¥å¡¼¤Î³ÆÍ×Áǡʥꥹ¥È¥¢¥¤¥Æ¥à¡Ë¤òɽ¼¨¤¹¤ëºÝ¤Ë»ÈÍѤ¹¤ë¥ì¥¤¥¢¥¦¥È¤ò»ØÄꤹ¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¤¬¡¢º£²ó»ÈÍѤ·¤Æ¤¤¤ë¡Öandroid.R.layout.simple_list_item_1¡×¤ÏAndroid¤¬É¸½à¤ÇÍÑ°Õ¤·¤Æ¤¤¤ë¥ì¥¤¥¢¥¦¥È¥ê¥½¡¼¥¹¤Ç¡¢TextView¤ò1¤Ä´Þ¤à¤À¤±¤Îñ½ã¤Ê¥ì¥¤¥¢¥¦¥È¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤ÎTextView¤Ë¥ê¥¹¥È¥Ç¡¼¥¿Ãæ¤Î³Æʸ»úÎó¤¬É½¼¨¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£~ ¡¡ArrayList¤«¤éʸ»úÎóÇÛÎó¤òºîÀ®¤·¡¢¤³¤Î¥Ç¡¼¥¿¤ò¤â¤È¤ËºîÀ®¤·¤¿ArrayAdapter¤òListView¤ÎsetAdapter¥á¥½¥Ã¥É¤Ç´ØÏ¢ÉÕ¤±¤Æ¤¤¤Þ¤¹¡£ ¡¡ºÇ¸å¤ËFindTask.java¤ò³«¤¡¢FFindActivity¤È¤Ê¤Ã¤Æ¤¤¤ë²Õ½ê¤òÁ´¤ÆResultActivity¤Ë½ñ¤´¹¤¨¤ì¤Ð¥½¡¼¥¹¥³¡¼¥É¤Î½¤Àµ¤Ï´°Î»¤Ç¤¹¡£ ¡¡»Ä¤ëºî¶È¤Ï¥Þ¥Ë¥Õ¥§¥¹¥È¤Î½¤Àµ¤Ç¤¹¡£Äɲä·¤¿ResultActivity¤òÍøÍѲÄǽ¤Ë¤¹¤ë¤Ë¤Ï¡¢¥Þ¥Ë¥Õ¥§¥¹¥È¤Ç¤³¤ì¤òÀë¸À¤·¤Ê¤±¤ì¤Ð¤¤¤±¤Þ¤»¤ó¡£Package Explorer¤«¤éAndroidManifest.xml¤ò³«¤¡¢FFindActivity¤òÀë¸À¤·¤Æ¤¤¤ëactivityÍ×ÁǤΤ¢¤È¤Ë°Ê²¼¤òÄɲä·¤Þ¤¹¡Ê¥ê¥¹¥È2-21¡Ë¡£ -¥ê¥¹¥È2-21 : <activity android:label="@string/app_name" android:name=".ResultActivity" > </activity> ~ ¡¡°Ê¾å¤ÇÁ´¤Æ¤Î½¤Àµ¤¬´°Î»¤·¤Þ¤·¤¿¡£Áᮼ¹Ԥ·¤Æ¤ß¤Þ¤·¤ç¤¦¡Ê¿Þ2-11¡Ë¡£ CENTER:&ref(./02_11.png,); CENTER:¿Þ2-11~ ~ ~ **2-8. FFindÁ´¥½¡¼¥¹¥³¡¼¥É/XML¥Õ¥¡¥¤¥ë [#h2f70468] -¥ê¥¹¥È2-22 FFindActivity.java : import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class FFindActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button button = (Button) findViewById(R.id.FindButton); if (button != null) { button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (view.getId() == R.id.FindButton) { EditText text; text = (EditText) findViewById(R.id.FindTarget); String target = text.getText().toString(); if (target.equals("") == false) { Intent intent = new Intent(getApplicationContext(), com.beatcraft.ffind.ResultActivity.class); intent.putExtra("Target", target); startActivity(intent); } } } }); } } } ~ ~ -¥ê¥¹¥È2-23 ResultActivity.java : package com.beatcraft.ffind; import java.io.File; import java.util.ArrayList; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class ResultActivity extends Activity { private ArrayList<String> mList; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.result); mList = new ArrayList<String>(); Intent intent = getIntent(); if (intent == null) { finish(); } String target = intent.getStringExtra("Target"); FindTask task = new FindTask(this); task.execute(target); } public void listFile(String target) { listFile(target, "/", mList); } public void result() { if (mList.size() > 0) { ListView lv = (ListView) findViewById(R.id.Result); String sa[] = new String[mList.size()]; for (int i = 0; i < mList.size(); ++i) { sa[i] = mList.get(i); } ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, sa); lv.setAdapter(adapter); } else { Toast.makeText(this, "* NOT FOUND *", Toast.LENGTH_SHORT).show(); } } private void listFile(String target, String folder, ArrayList<String> list) { File f = new File(folder); File fl[] = f.listFiles(); if (fl != null) { for (int i = 0; i < fl.length; ++i) { if (list.size() == 5000) { break; } File tmp = fl[i]; String name = tmp.getName(); if (name.contains(target) == true) { list.add(name); } if (tmp.isDirectory() == true) { try { String c = tmp.getAbsolutePath(); if (c.equals(tmp.getCanonicalPath()) == true) { if (c != null) { listFile(target, c, list); } } } catch (Exception e) { e.printStackTrace(); } } } } } } ~ ~ -¥ê¥¹¥È2-24 FindTask.java : package com.beatcraft.ffind; import android.app.ProgressDialog; import android.os.AsyncTask; public class FindTask extends AsyncTask<String, Integer, Void> { private ResultActivity mActivity; private ProgressDialog mDialog; public FindTask(ResultActivity activity) { mActivity = activity; } @Override protected void onPreExecute() { mDialog = new ProgressDialog(mActivity); mDialog.setMessage(mActivity.getString(R.string.find_progress)); mDialog.show(); } @Override protected Void doInBackground(String... arg0) { String target = arg0[0]; mActivity.listFile(target); return null; } @Override protected void onPostExecute(Void v) { mDialog.dismiss(); mDialog = null; mActivity.result(); mActivity = null; } } ~ ~ -¥ê¥¹¥È2-25 main.xml : <?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:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/FindTarget" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:singleLine="true" > <requestFocus /> </EditText> <Button android:id="@+id/FindButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/find_button" /> </LinearLayout> </LinearLayout> ~ ~ -¥ê¥¹¥È2-26 result.xml : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/Result" android:layout_width="fill_parent" android:layout_height="fill_parent" > </ListView> </LinearLayout> ~ ~ -¥ê¥¹¥È2-27 AndroidManifest.xml : <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.beatcraft.ffind" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > <activity android:label="@string/app_name" android:name=".FFindActivity" > <intent-filter > <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:label="@string/app_name" android:name=".ResultActivity" > </activity> </application> </manifest> ---- RIGHT:ÆâÆ£