Software/Android/¥¢¥×¥ê¥±¡¼¥·¥ç¥ó³«È¯¥Æ¥­¥¹¥È

Chapter 2 : ¼ÂÍÑ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó³«È¯¤Î´ðÁÃ

¡¡¤³¤Î¾Ï¤Ç¤Ï¥Õ¥¡¥¤¥ë¸¡º÷¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î³«È¯¤òÄ̤·¤Æ¡¢¼ÂÍÑŪ¤ÊAndroid¥¢¥×¥ê¥±¡¼¥·¥ç¥ó³«È¯¤Î´ðÁäò²òÀ⤷¤Þ¤¹¡£

¡¡Android¤Ë¤Ï¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Çưºî¤¹¤ë¥µ¡¼¥Ó¥¹¡¢¥Û¡¼¥à²èÌ̤ËÀßÃÖ²Äǽ¤Ê¥¦¥£¥¸¥§¥Ã¥È¤È¤¤¤Ã¤¿ÍÍ¡¹¤Ê·ÁÂ֤Υ¢¥×¥ê¥±¡¼¥·¥ç¥ó¤¬Â¸ºß¤·¤Þ¤¹¤¬¡¢ËܾϤǤÏÁ´²èÌ̤òÀêÍ­¤¹¤ë²èÌ̡ʥ¦¥£¥ó¥É¥¦¡Ë¤ò»ý¤Ä¡¢°ìÈÌŪ¤Ê¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ò¼è¤ê°·¤¤¤Þ¤¹¡£

2-1. ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥¸¥§¥¯¥È¤Î¹½À®Í×ÁÇ

¡¡¤Þ¤º¤Ï¥Ù¡¼¥¹¤È¤Ê¤ë¥×¥í¥¸¥§¥¯¥È¤òÍѰդ·¤Þ¤¹¡£°Ê²¼¤ÎÍͤËÀßÄꤷ¡¢¿·µ¬Android¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥×¥í¥¸¥§¥¯¥È¤òºîÀ®¤·¤Þ¤¹¡£

  • Project Name¤Ë¡ÖFFind¡×¤ÈÆþÎϤ·¤Þ¤¹
  • Application Name¤Ë¡ÖFFind¡×¤ÈÆþÎϤ·¤Þ¤¹
  • Package Name¤Ë¡Öcom.beatcraft.ffind¡×¤ÈÆþÎϤ·¤Þ¤¹
  • Create Activity¤Ë¥Á¥§¥Ã¥¯¤òÆþ¤ì¡¢¡ÖFFindActivity¡×¤ÈÆþÎϤ·¤Þ¤¹ 

¡¡Android¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥×¥í¥¸¥§¥¯¥È¤ÏÂ礭¤¯Ê¬¤±¤Æ°Ê²¼¤Î3¤Ä¤ÎÍ×ÁǤǹ½À®¤µ¤ì¤Þ¤¹¡£

¡¡­¡¥Þ¥Ë¥Õ¥§¥¹¥È¥Õ¥¡¥¤¥ë
¡¡­¢ Java¥½¡¼¥¹¥³¡¼¥É
¡¡­£¥ê¥½¡¼¥¹
02_01.png
¿Þ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. ¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Î¹½À®Í×ÁǤȥ쥤¥¢¥¦¥È

¡¡Android¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î´é¤È¤Ê¤ë¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤Ï¡¢¥¢¥×¥ê¥±¡¼¥·¥ç¥ó²èÌ̤Îɽ¼¨¤ÎÏÈÁȤߤòÄ󶡤·¤Þ¤¹¤¬¡¢¤³¤ì¤À¤±¤Ç¤Ï²¿¤«¤òɽ¼¨¤·¤¿¤ê¥æ¡¼¥¶¡¼ÆþÎϤò¼õ¤±ÉÕ¤±¤¿¤ê¤È¤¤¤Ã¤¿¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¡£¤³¤ÎÏȤÎÃæ¤Ë¡¢¥Ó¥å¡¼¡ÊView¡Ë¤ä¥Ó¥å¡¼¥°¥ë¡¼¥×¡ÊViewGroup¡Ë¤È¤¤¤Ã¤¿³¬Áع½Â¤¤ò»ý¤ÄGUIÉôÉʤòÀßÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¡¡¥Ó¥å¡¼¤ÏGUIÉôÉʤδðËܤȤʤë¤â¤Î¤Ç¡¢¥Ü¥¿¥ó¤ä¥Æ¥­¥¹¥È¥Ü¥Ã¥¯¥¹¤Ê¤É¤ÏÁ´¤Æ¥Ó¥å¡¼¤Ç¤¹¡£¤Þ¤¿¸å½Ò¤Î¥Ó¥å¡¼¥°¥ë¡¼¥×¤â¥Ó¥å¡¼¤Î°ì¼ï¤È¤Ê¤ê¤Þ¤¹¡£¥Ó¥å¡¼¥°¥ë¡¼¥×¤Ï¥Ó¥å¡¼¤òÊ£¿ô¤Þ¤È¤á¤Æ´ÉÍý¤¹¤ë¤â¤Î¤Ç¡¢GUIÉôÉʤò¤É¤Î¤è¤¦¤ËÇÛÃÖ¤¹¤ë¤«¤ò·èÄꤹ¤ë¥ì¥¤¥¢¥¦¥È¤â¤³¤ì¤Ë´Þ¤Þ¤ì¤Þ¤¹¡£

¡¡¥ì¥¤¥¢¥¦¥È¤ÏGUIÉôÉʤò¤É¤Î¤è¤¦¤ËÇÛÃÖ¤¹¤ë¤«¤ò·èÄê¤Å¤±¤ë¥Ó¥å¡¼¥°¥ë¡¼¥×¤Ç¡¢LinearLayout¤äRelativeLayout¡¢TableLayout¤È¤¤¤Ã¤¿ÇÛÃÖÊýË¡¤Î°Û¤Ê¤ë¥ì¥¤¥¢¥¦¥È¤¬ÍѰդµ¤ì¤Æ¤¤¤Þ¤¹¡£

  • LinearLayout
    • LinearLayout¤Ï¥Ó¥å¡¼¤òÅÐÏ¿¤·¤¿½çÈÖ¤Ëʤ٤ëɸ½àŪ¤Ê¥ì¥¤¥¢¥¦¥È¤Ç¤¹¡£½ÄÊý¸þ¤Ëʤ٤Ƥ¤¤¯¤«¡¢²£Êý¸þ¤Ëʤ٤Ƥ¤¤¯¤«¤òÁªÂò½ÐÍè¤Þ¤¹¡£
  • RelativeLayout
    • RelativeLayout¤Ï¥Ó¥å¡¼Æ±»Î¤ÎÇÛÃ֤˴ØÏ¢À­¤ò¤â¤¿¤»¡¢¤½¤ì¤¾¤ì¤Î¥Ó¥å¡¼¤Î°ÌÃÖ´Ø·¸¤ò»ØÄꤹ¤ë¤³¤È¤ÇÊ£»¨¤Ê¥ì¥¤¥¢¥¦¥È¤ò¼Â¸½¤·¤Þ¤¹¡£
  • TableLayout
    • TableLayout¤Ïɽ·Á¼°¤Ë¥Ó¥å¡¼¤òÇÛÃÖ¤¹¤ë¥ì¥¤¥¢¥¦¥È¤Ç¤¹¡£

¡¡¤³¤Î¾¤Ë¤âÍÑÅӤ˱þ¤¸¤¿¤¤¤¯¤Ä¤«¤Î¥ì¥¤¥¢¥¦¥È¤¬Ä󶡤µ¤ì¤Æ¤ª¤ê¡¢¥ì¥¤¥¢¥¦¥È¼«ÂΤⳬÁØÅª¤ËÇÛÃÖ¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£

2-3. ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥ì¥¤¥¢¥¦¥ÈºîÀ®

¡¡¤³¤³¤«¤é¤ÏºîÀ®¤·¤¿¥×¥í¥¸¥§¥¯¥È¤ò¤â¤È¤Ë¼ÂºÝ¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ËÁȤßÂØ¤¨¤Æ¤¤¤­¤Þ¤¹¡£º£²óºîÀ®¤¹¤ë¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÏAndroidüËöÆâ¤Î¥Õ¥¡¥¤¥ë¤òÁöºº¤·¡¢ÆþÎϤµ¤ì¤¿¥­¡¼¥ï¡¼¥É¤ò¥Õ¥¡¥¤¥ë̾¤Ë´Þ¤à¥Õ¥¡¥¤¥ë¤ò°ìÍ÷ɽ¼¨¤¹¤ë¤È¤¤¤¦¤â¤Î¤Ç¤¹¡£

¡¡¿Þ2-2¤¬º£²ó¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î²èÌÌ¥¤¥á¡¼¥¸¤È¤Ê¤ê¤Þ¤¹¡£

02_02.png
¿Þ2-2


¡¡Eclipse¤ÎPackage Explorer¤«¤émain.xml¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤­¡¢¾åµ­¥¤¥á¡¼¥¸¤Ë¤¢¤ï¤»¥ì¥¤¥¢¥¦¥È¤òÊѹ¹¤·¤Æ¤¤¤­¤Þ¤¹¡£¼«Æ°À¸À®¤µ¤ì¤¿main.xml¤Ï¿Þ2-3¤Î¤è¤¦¤Ë¡¢½ÄÊý¸þ¤ÎLinearLayout¤òºÆ¾å°Ì¤ËÃÖ¤­¡¢¤½¤³¤ËTextView¤ò1¤ÄÇÛÃÖ¤·¤¿Êª¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

02_03.png
¿Þ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. ¸¡º÷½èÍý¤Î¼ÂÁõ

¡¡¤³¤³¤«¤é¤Ï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ÌäÂê¤È¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î¥Þ¥ë¥Á¥¹¥ì¥Ã¥É²½

¡¡Á°¹à¤Ç´°À®¤·¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ç¤¹¤¬¡¢¸¡º÷·ë²Ì¤¬Â¿¤¯¤Ê¤ë¤È¿Þ2-4¤Î¤è¤¦¤Ê¥¨¥é¡¼¤¬È¯À¸¤·¤ÆÍî¤È¤µ¤ì¤Æ¤·¤Þ¤¦¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£

02_04.png
¿Þ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¡Ë¡£

02_05.png
¿Þ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¤Ë¤è¤ë¥Þ¥ë¥Á¥¹¥ì¥Ã¥É½èÍý

¡¡Á°¹à¤Ç¤ÏThread¤ÈHandler¤ò»ÈÍѤ·¤Æ»þ´Ö¤Î¤«¤«¤ë½èÍý¤ò¥á¥¤¥ó¥¹¥ì¥Ã¥É¤«¤éʬΥ¤·¤Þ¤·¤¿¤¬¡¢Android¤Ç¤Ï¤³¤¦¤·¤¿½èÍý¤ÎÀÚ¤êʬ¤±¤ò´Êñ¤Ë¼ÂÁõ¤¹¤ë¤³¤È¤Î½ÐÍè¤ëAsyncTask¤È¤¤¤¦¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥¯¥é¥¹¤¬Ä󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£FFind¤ò¤³¤ÎAsyncTask¤òÍøÍѤ·¤¿Êª¤Ëºî¤êÂØ¤¨¤Æ¤ß¤Þ¤·¤ç¤¦¡£

¡¡AsyncTask¤Ë¤Ï¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Ç¹Ô¤¦É¬Íפ¬¤¢¤ë½èÍý¤ò¼ÂÁõ¤¹¤ë¥á¥½¥Ã¥É¤ä¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î´°Î»¸å¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¥á¥½¥Ã¥É¤¬ÍѰդµ¤ì¤Æ¤ª¤ê¡¢¤³¤ì¤é¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤¹¤ë¤³¤È¤ÇÈ󯱴ü½èÍý¤ò´Êñ¤Ë¼Â¸½½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ÂåɽŪ¤Êʪ¤ò°Ê²¼¤Ëµó¤²¤Æ¤¤¤­¤Þ¤¹¡£

  • onPreExecute
    • ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î¼Â¹ÔÁ°¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ëÁ°½èÍýÍѤΥ᥽¥Ã¥É¤Ç¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
  • doInBackground
    • ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍýÍѤΥ᥽¥Ã¥É¤Ç¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤È¤ÏÊÌ¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
  • onProgressUpdate
    • ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î¿Ê¹Ô¾õ¶·¹¹¿·»þ¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¥á¥½¥Ã¥É¤Ç¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
  • onPostExecute
    • ¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î´°Î»¸å¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë¸å½èÍýÍѤΥ᥽¥Ã¥É¤Ç¡¢¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£

¡¡¤³¤³¤«¤é¤Ï¼ÂºÝ¤ËAsyncTask¤Î¥µ¥Ö¥¯¥é¥¹¤òºîÀ®¤·¡¢FFind¤ËɬÍפʽèÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤­¤Þ¤¹¡£Eclipse¤ÎPackage Explorer¤ÇFFind¤ò¥¯¥ê¥Ã¥¯¤·¤ÆÁªÂò¤·¡¢¥á¥Ë¥å¡¼¤«¤é¡ÖFile > New > Class¡×¤òÁªÂò¤·¤Þ¤¹¡£

02_06.png
¿Þ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¥Ñ¥Ã¥±¡¼¥¸¤Î¥¤¥ó¥Ý¡¼¥È¤¬É¬ÍפǤ¹¡£

02_07.png
¿Þ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¤Î¤è¤¦¤Ê¥À¥¤¥¢¥í¥°¤¬É½¼¨¤µ¤ì¡¢¸¡º÷¤¬½ªÎ»¤¹¤ë¤È¼«Æ°Åª¤Ë¾Ã¤¨¤ë¤³¤È¤ò³Îǧ¤·¤Æ²¼¤µ¤¤¡£

02_08.png
¿Þ2-8


¡¡¥×¥í¥°¥ì¥¹¥À¥¤¥¢¥í¥°¤Ï¸½ºß¤Î¿ÊĽ¾õ¶·¤ò¥Ð¡¼¤Ç¼¨¤¹¤Ê¤É¡¢¤¤¤¯¤Ä¤«¤Î¥¹¥¿¥¤¥ë¤¬»ÈÍѲÄǽ¤Ç¤¹¡£AsyncTask¤ÎonProgressUpdate¥á¥½¥Ã¥ÉÆâ¤Ç¥À¥¤¥¢¥í¥°¤Î¿ÊĽ¾õ¶·¤ò¹¹¿·¤·¡¢doInBackground¤Ç¤Î½èÍý¿Ê¹Ô¾õ¶·¤Ë±þ¤¸¤ÆpublishProgress¥á¥½¥Ã¥É¤òŬµ¹¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¡¢¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É½èÍý¤Î¿ÊĽ¤Ë±þ¤¸¤¿É½¼¨¤¬¹Ô¤¨¤Þ¤¹¡£

2-7. ¥¢¥¯¥Æ¥£¥Ó¥Æ¥£¤ÎÁ«°Ü

¡¡¤³¤³¤«¤é¤Ï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¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤Æ²¼¤µ¤¤¡£

02_09.png
¿Þ2-9


¡¡Â³¤¯"New Android Layout XML File"¤ÇFile¤Ë¡Öresult.xml¡×¤ÈÆþÎϤ·¡¢¡ÖFinish¡×¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥ì¥¤¥¢¥¦¥È¥ê¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£
¡¡Package Explorer¤«¤éresult.xml¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤Æ³«¤­¡¢ºîÀ®¤µ¤ì¤¿¥ì¥¤¥¢¥¦¥È¤Ë¥ê¥¹¥È¥Ó¥å¡¼¤òÄɲä·¤Þ¤¹¡£Palette¤«¤éComposite¤ò¥¯¥ê¥Ã¥¯¤·¤ÆÅ¸³«¤·¡¢ListView¤ò¥É¥é¥Ã¥°¡õ¥É¥í¥Ã¥×¤ÇÇÛÃÖ¤·¤Þ¤¹¡£ListView¤Ï¹õÅɤê¤ÇÆÃ¤Ë²¿¤âɽ¼¨¤µ¤ì¤Ê¤¤¤¿¤á¤ï¤«¤ê¤Å¤é¤¤¤Î¤Ç¤¹¤¬¡¢CompositeÆâ¤Î°ìÈֺǽé¤Î¹àÌܤ¬ListView¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡Ê¿Þ2-10¡Ë¡£

02_10.png
¿Þ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¡Ë¡£

02_11.png
¿Þ2-11


2-8. FFindÁ´¥½¡¼¥¹¥³¡¼¥É/XML¥Õ¥¡¥¤¥ë

  • ¥ê¥¹¥È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>

ÆâÆ£

źÉÕ¥Õ¥¡¥¤¥ë: file02_11.png 1188·ï [¾ÜºÙ] file02_10.png 1221·ï [¾ÜºÙ] file02_09.png 1244·ï [¾ÜºÙ] file02_08.png 1128·ï [¾ÜºÙ] file02_07.png 1102·ï [¾ÜºÙ] file02_06.png 1225·ï [¾ÜºÙ] file02_05.png 1232·ï [¾ÜºÙ] file02_04.png 1115·ï [¾ÜºÙ] file02_03.png 1117·ï [¾ÜºÙ] file02_02.png 1103·ï [¾ÜºÙ] file02_01.png 1270·ï [¾ÜºÙ]

BC::labs¤Ø¤Î¼ÁÌä¤Ï¡¢bc9-dev ¡÷ googlegroups.com¡¡¤Þ¤Ç¤ª´ê¤¤Ãפ·¤Þ¤¹¡£
¥È¥Ã¥×   ÊÔ½¸ Åà·ë º¹Ê¬ ¥Ð¥Ã¥¯¥¢¥Ã¥× źÉÕ Ê£À½ ̾Á°Êѹ¹ ¥ê¥í¡¼¥É   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ºÇ½ª¹¹¿·¤ÎRSS
Last-modified: 2011-12-12 (·î) 20:44:19 (4954d)