[[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 :&#160;
 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:ÆâÆ£

BC::labs¤Ø¤Î¼ÁÌä¤Ï¡¢bc9-dev ¡÷ googlegroups.com¡¡¤Þ¤Ç¤ª´ê¤¤Ãפ·¤Þ¤¹¡£
¥È¥Ã¥×   ÊÔ½¸ º¹Ê¬ ¥Ð¥Ã¥¯¥¢¥Ã¥× źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ºÇ½ª¹¹¿·¤ÎRSS