2011年5月31日火曜日

文字列を数値に変換

parseInt(String)

Failed to pull selection

Devices タブからエミュレータを選択してから処理する。

文字列比較

間違い
String x = "android";
if (x == "android")
{
  処理
}

正解
String x = "android";
if (x.equals("android")) 
{
  処理
}

間違いでもエラーが出ないので悩ましい。

2011年5月29日日曜日

レコードの更新

id 番号を指定してレコードの内容を更新する。

package com.myDatabase;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.content.ContentValues;
import android.content.Context;

public class MyDatabase extends Activity {
    /** Called when the activity is first created. */

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

        //ヘルパークラスのインスタンスを作成します。
        MyDBHelper helper = new MyDBHelper(this);

        //書き込み可能でデータベースを開く
        //(ここでDBファイルがなかったら作成する(onCreate)
        SQLiteDatabase db = helper.getWritableDatabase();

        Cursor c = db.query("myDatabaseTable", new String[] {"id", "name", "age"  },
          null, null, null, null, null);

        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);

        String text="";
        while (isEof) {
            text += String.format("%d : %s : %d歳\r\n", c.getInt(0),c.getString(1), c.getInt(2));
            isEof = c.moveToNext();
        }

        textView1.setText(text);

        c.close();
        db.close();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
    

    //レコードの更新ボタンが押された時
    public void SetRecordOnClick(View v) {
     MyDBHelper helper = new MyDBHelper(this);
     SQLiteDatabase db = helper.getWritableDatabase();

     ContentValues values = new ContentValues();

     //追加するデータ
     values.put("name", "データ更新");
     values.put("age", "100");
     
     db.update("myDatabaseTable",values, "id=1", null);

     //データの検索
        Cursor c = db.query("myDatabaseTable", new String[] {"id", "name", "age" },
          null, null, null, null, null);

        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);

        String text="";
        while (isEof) {
            text += String.format("%d : %s : %d歳\r\n", c.getInt(0),c.getString(1), c.getInt(2));
            isEof = c.moveToNext();
        }

        textView1.setText(text);

    }

    //DB利用には、SQLiteOpenHelper抽象クラスを継承する必要がある。
    public class MyDBHelper extends SQLiteOpenHelper {
        public MyDBHelper(Context context) {
            super(context, "database.db", null, 1);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         //データベースのバージョンが変わる場合に呼び出される。
        }

        @Override
        //ここでデータベース作成(コンストラクタに渡されたDBファイル名が存在しない場合に呼ばれる)
        public void onCreate(SQLiteDatabase db) {
            // テームルを作成
            db.execSQL(
                "create table myDatabaseTable("+
                "id INTEGER PRIMARY KEY AUTOINCREMENT,"+
                "name text not null,"+
                "age text"+
                ");"
            );

            // Insert文のSQLを実行してレコードを挿入
            db.execSQL("insert into myDatabaseTable(name,age) values ('聖徳太子', 10);");
            db.execSQL("insert into myDatabaseTable(name,age) values ('夏目漱石', 20);");
        }
    }
}

ダウンロード

スナップショットの保存

DDMSパースペクティブ を選択する。

スクリーンのキャプチャ のアイコンをクリックする

 保管ボタンを押してローカルフォルダに保存します。

レコードの削除


id番号を指定してレコードを削除する。
package com.myDatabase;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.content.ContentValues;
import android.content.Context;

public class MyDatabase extends Activity {
    /** Called when the activity is first created. */

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

        //ヘルパークラスのインスタンスを作成します。
        MyDBHelper helper = new MyDBHelper(this);

        //書き込み可能でデータベースを開く
        //(ここでDBファイルがなかったら作成する(onCreate)
        SQLiteDatabase db = helper.getWritableDatabase();

        Cursor c = db.query("myDatabaseTable", new String[] {"id", "name", "age"  },
          null, null, null, null, null);

        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);

        String text="";
        while (isEof) {
            text += String.format("%d : %s : %d歳\r\n", c.getInt(0),c.getString(1), c.getInt(2));
            isEof = c.moveToNext();
        }

        textView1.setText(text);

        c.close();
        db.close();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
    
    //レコード削除ボタンが押された時
    public void DeleteRecordOnClick(View v) {
     MyDBHelper helper = new MyDBHelper(this);
     SQLiteDatabase db = helper.getWritableDatabase();
     
     db.delete("myDatabaseTable", "id=1", null);
     
     //表示データを更新
        Cursor c = db.query("myDatabaseTable", new String[] {"id", "name", "age" },
          null, null, null, null, null);

        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);

        String text="";
        while (isEof) {
            text += String.format("%d : %s : %d歳\r\n", c.getInt(0),c.getString(1), c.getInt(2));
            isEof = c.moveToNext();
        }

        textView1.setText(text);
     
    }

    //レコードを追加ボタンが押された時
    public void SetRecordOnClick(View v) {
     MyDBHelper helper = new MyDBHelper(this);
     SQLiteDatabase db = helper.getWritableDatabase();

     ContentValues values = new ContentValues();

     //追加するデータ
     values.put("name", "新しいデータ");
     values.put("age", "1");
     db.insert("myDatabaseTable", null, values);

     //データの検索
        Cursor c = db.query("myDatabaseTable", new String[] {"id", "name", "age" },
          null, null, null, null, null);

        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);

        String text="";
        while (isEof) {
            text += String.format("%d : %s : %d歳\r\n", c.getInt(0),c.getString(1), c.getInt(2));
            isEof = c.moveToNext();
        }

        textView1.setText(text);

    }

    //DB利用には、SQLiteOpenHelper抽象クラスを継承する必要がある。
    public class MyDBHelper extends SQLiteOpenHelper {
        public MyDBHelper(Context context) {
            super(context, "database.db", null, 1);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         //データベースのバージョンが変わる場合に呼び出される。
        }

        @Override
        //ここでデータベース作成(コンストラクタに渡されたDBファイル名が存在しない場合に呼ばれる)
        public void onCreate(SQLiteDatabase db) {
            // テームルを作成
            db.execSQL(
                "create table myDatabaseTable("+
                "id INTEGER PRIMARY KEY AUTOINCREMENT,"+
                "name text not null,"+
                "age text"+
                ");"
            );

            // Insert文のSQLを実行してレコードを挿入
            db.execSQL("insert into myDatabaseTable(name,age) values ('聖徳太子', 10);");
            db.execSQL("insert into myDatabaseTable(name,age) values ('夏目漱石', 20);");
        }
    }
}

ダウンロード

レコードの追加

ボタンクリックでレコードを追加してみる

package com.myDatabase;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.content.ContentValues;
import android.content.Context;

public class MyDatabase extends Activity {
    /** Called when the activity is first created. */

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

        //ヘルパークラスのインスタンスを作成します。
        MyDBHelper helper = new MyDBHelper(this);

        //書き込み可能でデータベースを開く
        //(ここでDBファイルがなかったら作成する(onCreate)
        SQLiteDatabase db = helper.getWritableDatabase();

        Cursor c = db.query("myDatabaseTable", new String[] { "name", "age" },
          null, null, null, null, null);

        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);

        String text="";
        while (isEof) {
            text += String.format("%s : %d歳\r\n", c.getString(0), c.getInt(1));
            isEof = c.moveToNext();
        }

        textView1.setText(text);

        c.close();
        db.close();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
    
    public void SetRecordOnClick(View v) {
     MyDBHelper helper = new MyDBHelper(this);
     SQLiteDatabase db = helper.getWritableDatabase(); 
     
     ContentValues values = new ContentValues();
     
     //追加するデータ
     values.put("name", "新しいデータ");
     values.put("age", "1");
     db.insert("myDatabaseTable", null, values);
     
     //データの検索
        Cursor c = db.query("myDatabaseTable", new String[] { "name", "age" },
          null, null, null, null, null);

        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);

        String text="";
        while (isEof) {
            text += String.format("%s : %d歳\r\n", c.getString(0), c.getInt(1));
            isEof = c.moveToNext();
        }

        textView1.setText(text);

    }

    //DB利用には、SQLiteOpenHelper抽象クラスを継承する必要がある。
    public class MyDBHelper extends SQLiteOpenHelper {
        public MyDBHelper(Context context) {
            super(context, "database.db", null, 1);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         //データベースのバージョンが変わる場合に呼び出される。
        }

        @Override
        //ここでデータベース作成(コンストラクタに渡されたDBファイル名が存在しない場合に呼ばれる)
        public void onCreate(SQLiteDatabase db) {
            // テームルを作成
            db.execSQL(
                "create table myDatabaseTable("+
                "name text not null,"+
                "age text"+
                ");"
            );

            // Insert文のSQLを実行してレコードを挿入
            db.execSQL("insert into myDatabaseTable(name,age) values ('聖徳太子', 10);");
            db.execSQL("insert into myDatabaseTable(name,age) values ('夏目漱石', 20);");
        }
    }
}

ダウンロード

レコード検索

プロジェクトを作成して/res/layout/main.xml にTextViewコントロールを配置して、
TextViewコントロール にデータベースの内容を表示する。


package com.myDatabase;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.content.Context;

public class MyDatabase extends Activity {
    /** Called when the activity is first created. */

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

        //ヘルパークラスのインスタンスを作成します。
        MyDBHelper helper = new MyDBHelper(this);
        
        //書き込み可能でデータベースを開く  
        //(ここでDBファイルがなかったら作成する(onCreate) 
        SQLiteDatabase db = helper.getWritableDatabase();
        
        Cursor c = db.query("myDatabaseTable", new String[] { "name", "age" },
          null, null, null, null, null);
        
        boolean isEof = c.moveToFirst();
        TextView textView1 = (TextView)findViewById(R.id.textView1);
        
        String text="";
        while (isEof) {
            text += String.format("%s : %d歳\r\n", c.getString(0), c.getInt(1));
            isEof = c.moveToNext();
        }
        textView1.setText(text);
        
        c.close();
        db.close();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    //DB利用には、SQLiteOpenHelper抽象クラスを継承する必要がある。
    public class MyDBHelper extends SQLiteOpenHelper {
        public MyDBHelper(Context context) {
            super(context, "database.db", null, 1);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         //データベースのバージョンが変わる場合に呼び出される。
        }

        @Override
        //ここでデータベース作成(コンストラクタに渡されたDBファイル名が存在しない場合に呼ばれる)
        public void onCreate(SQLiteDatabase db) {
            // テームルを作成
            db.execSQL(
                "create table myDatabaseTable("+
                "name text not null,"+
                "age text"+
                ");"
            );

            // Insert文のSQLを実行してレコードを挿入
            db.execSQL("insert into myDatabaseTable(name,age) values ('聖徳太子', 10);");
            db.execSQL("insert into myDatabaseTable(name,age) values ('夏目漱石', 20);");
        }
    }
}

SQLiteDatabase.query()メソッドの
第一引数はテーブル名。
第二引数は、取得する列名(カラム名、フィールド名)の配列を指定。
第三引数、第四引数は取得するレコードの条件を指定。
第五引数は、group by句を指定。
第六引数は、Having句を指定。
第七引数は、order by句を指定。
第八引数は、limit句(取得するレコードの上限数)を指定。
使わない場合は、nullを指定。
ダウンロード

2011年5月28日土曜日

データベースを確認-adbシェル

コマンドプロンプトを開いて
D:\androidSDKをインストールした場所\platform-tools>adb shell

dataフォルダの中のdata に移動
# cd data/data

パッケージ名/datadases に移動
# cd com.myDatabase/databases

SQLiteを起動する。
# sqlite3 database.db
sqlite3 database.db
SQLite version 3.6.22
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>


テーブル一覧を表示する
sqlite> .table
.table
android_metadata  myDatabaseTable

テーブルデータの確認
sqlite> select * from myDatabaseTable;
select * from myDatabaseTable;
閨門セウ螟ェ蟄酢10
螟冗岼貍ア遏ウ|20
sqlite>

参考:
pwd:いまいるディレクトリの確認
ls:フォルダ内のファイル名一覧

データベースを確認-PupSQLite


DDMSパースペクティブ を表示させて

ファイル・エクスプローラを選択します。
data/data/パッケージ名/databases/ファイル名 を選択します。
右上のフロッピーのアイコンをクリックしてファイルを保存します。

PupSQLite をダウンロードしてきます。
PupSQLite を起動させてデータベースファイルを開きます。

ファイルの削除

# rm database.db
rm database.db

データベースの作成

データベースを開いて確認する為にファイル名を指定してデータベースを作成する。

package com.myDatabase;

import android.app.Activity;
import android.os.Bundle;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.content.Context;

public class MyDatabase extends Activity {
    /** Called when the activity is first created. */

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

        //ヘルパークラスのインスタンスを作成します。
        MyDBHelper helper = new MyDBHelper(this);
        
        //書き込み可能でデータベースを開く  
        //(ここでDBファイルがなかったら作成する(onCreate) 
        helper.getWritableDatabase();
        helper.getReadableDatabase().close();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    //DB利用には、SQLiteOpenHelper抽象クラスを継承する必要がある。
    public class MyDBHelper extends SQLiteOpenHelper {
        public MyDBHelper(Context context) {
            super(context, "database.db", null, 1);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
         //データベースのバージョンが変わる場合に呼び出される。
        }

        @Override
        //ここでデータベース作成(コンストラクタに渡されたDBファイル名が存在しない場合に呼ばれる)
        public void onCreate(SQLiteDatabase db) {
            // テームルを作成
            db.execSQL(
                "create table myDatabaseTable("+
                "name text not null,"+
                "age text"+
                ");"
            );

            // Insert文のSQLを実行してレコードを挿入
            db.execSQL("insert into myDatabaseTable(name,age) values ('聖徳太子', 10);");
            db.execSQL("insert into myDatabaseTable(name,age) values ('夏目漱石', 20);");
        }
    }
}

Activityのライフサイクル

onCreate(Bundle)
アクティビティが最初に起動する時に呼ばれます。
onSaveInstanceStateメソッドで保存された情報がある場合は、引数のBundleにその情報が渡されてきます。

onStart()
アクティビティが表示される直前に呼び出されます。

onResume()
アクティビティがユーザーの入力を受け付けるようになる時に呼び出されます。
メディアの再生などを開始するのによいタイミングです。
onPause()
アクティビティがバックグラウンドになる直前に呼び出されます。このメソッドが呼ばれた後はメモリが少なくなるとアプリケーションが何の通知もなく破棄されることがあるので、このタイミングで設定値などの保存を行うと良いでしょう。

onStop()
アクティビティがしばらく使われなくなった時に呼び出されます。ほかのアクティビティが起動してバックグラウンドになった時や、アプリケーションが終了する直前に呼び出されます。しかし、onPauseの説明で書いたようにメモリが少なくなった場合はonStopやonDestroyが呼び出されずにプロセスが破棄される場合があるので注意が必要です。

onRestart()
onStopが呼ばれた後に、ほかのアクティビティが終了する等で、再びアクティビティが表示される時に呼び出されます。


onDestroy()
アクティビティが破棄される直前に呼び出されます。
onStopの説明で書いたように呼び出されないこともあるので注意が必要です。


onSaveInstanceState(Bundle)
インスタンスの状態を保存すべきタイミングで呼び出されます。ここで引数のBundleに対して値を保存します。いったんアプリケーションのプロセスが終了していても、保存した値はonCreateメソッドの引数に引き継がれるので、再度起動した時にBundleで渡される値を利用して状態を復元させることができます。

画面の回転方法

左Ctrl+F11で回転します。

2011年5月27日金曜日

設定されたデータを見てみる

エミュレータが起動している状態でDDMSパースペクティブを選択する。

Eclipse で設定されたデータが保存されているファイルを表示する。

ファイル・エクスプローラを選択する。
メニュー選択から設定画面へ の記事で作成されたファイルを選択してみる。
data/data/com.menuPreference/shared_frefs/com.menuPreference_preferences.xml

右上のフロッピーアイコンをクリックしてパソコンのローカルフォルダに保存する。
ローカルフォルダに保存したファイルを Eclipse にドラッグして表示してみた。




メニュー選択から設定画面へ

Android プロジェクトを作成する
プロジェクト名:MenuPreference
ビルドターゲット:Android 2.2
プロパティー
アプリケーション名:MenuPreference
パケージ名:com.menuPreference
Create Activity:MenuPreference
Min SDK Version:8

メニューボタンが押された時のメニューを作る
res フォルダの中にmenuフォルダを作成する。
menuフォルダを右クリックして、新規 から Android Xml File を選択する。
ファイル名:menu_list.xml
Item を追加する。
Id:@+id/item1
Title:設定
Visible:true
Enabled:true

MenuPreference.java にメニューボタンが押された時の動作を記入する。

MenuPreference.java のソース
package com.menuPreference;

import android.app.Activity;
import android.os.Bundle;

public class MenuPreference extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    // オプションメニューの生成
    @Override
    public boolean onCreateOptionsMenu(android.view.Menu menu){
      super.onCreateOptionsMenu(menu);
      getMenuInflater().inflate(R.menu.menu_list,menu);
      return true;
     }
}
実行画面

設定をクリックしても何も起きません。

設定を押した時に表示する画面をxmlで作ります。
res フォルダの中にxmlフォルダを作成する。
menuフォルダを右クリックして、新規 から Android Xml File を選択する。
ファイル名:preference.xml
what type of resource would you like to create? でPreferenceを選択する。

preference.xmlを編集する 追加ボタンを押して PreferenceCategoryを追加する PreferenceCategory の中に CheckBoxPreference を追加する。


設定画面を表示するアクティビティを作る
/src/com.menuPreference を選択して右クリックして 新規からクラスを選択する。
ファイル名: MenuList.java

MenuList.java のソース
package com.menuPreference;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class MenuList extends PreferenceActivity {
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preference);
    }

}

アクティビティを作成したら忘れないうちに
AndroidManifest.xmlに作成したアクティビティを追加する。 

AndroidManifest.xml を設定 にしたら
下のタブからアプリケーションを選択する。


追加されたActivity を選択してName* の参照をクリックする。

Activity を選択してOKをクリックする。

 作成したMenuList を選択してOKをクリックする

 MenuList が追加されました。


メニューボタンを押して表示されたメニューを選択した時の動作を設定する。
設定をタップしたら設定画面が表示されるようにする。
MenuPreference.java にソースを追加します。
MenuPreference.java のソース
package com.menuPreference;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;

public class MenuPreference extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    // オプションメニューの生成
    @Override
    public boolean onCreateOptionsMenu(android.view.Menu menu){
      super.onCreateOptionsMenu(menu);
      getMenuInflater().inflate(R.menu.menu_list,menu);
      return true;
     }
    
    //メニーを選択した時の動作
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.item1:
   Intent intent = new Intent();
   intent.setClassName(this, "com.menuPreference.MenuList");
   startActivity(intent);
   return true;
  default:
   break;
  }
        return false;
    }
}

動作確認

チェックボックスにチェックも入れられ、
うまく動いている様です。

ダウンロード

2011年5月26日木曜日

メニュータップでアクション

xmlファイルで作成を修正して、 メニューがタップされたら終了するプログラムを作ってみる。

Menu.java のソース
package com.Menu;

import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;

public class Menu extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    /**
     * オプションメニューの生成
     */
    @Override
    public boolean onCreateOptionsMenu(android.view.Menu menu){
      super.onCreateOptionsMenu(menu);
      getMenuInflater().inflate(R.menu.list,menu);
      return true;
     }
    @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
  case R.id.item1:
   finish();
   break;

  default:
   break;

  }
  return super.onOptionsItemSelected(item);
 }
}

メニューをxmlファイルで作成

Android プロジェクトを作成
res フォルダの中にmenuフォルダを作成する。
menuフォルダを右クリックして、新規 から Android Xml File を選択する。
ファイル名:list.xml
Item を追加する。
Id:@+id/item1
Title:メニュー1
Icon:@android:drawable/ic_menu_edit
Visible:true
Enabled:true


Menu.java のソース
package com.Menu;

import android.app.Activity;
import android.os.Bundle;

public class Menu extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    /**
     * オプションメニューの生成
     */
    @Override
    public boolean onCreateOptionsMenu(android.view.Menu menu){
      super.onCreateOptionsMenu(menu);
      getMenuInflater().inflate(R.menu.list,menu);
      return true;
     }
}

ダウンロード

日付設定画面を出す


DateSet.java のソース
package com.DateSet;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;

public class DateSet extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
 }

 public void setDatePrefs(View v) {
  Intent intent = new Intent(Settings.ACTION_DATE_SETTINGS);
  startActivity(intent);
 }
}

ダウンロード

画面移動の際に値を送る

画面移動の記事を修正する。

res/values/strings.xml にsend_string を設定する

SecondScreen.javaのソース
package com.secondScreen;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class SecondScreen extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    public void ButtonOnClick(View v){
     Intent subactivity = new Intent(this,com.secondScreen.SubActivity.class);
     
     subactivity.putExtra(this.getString(R.string.send_string), "送られる文字列");
     
     startActivityForResult(subactivity, R.id.button1);
     
    }
}
画面移動のソースに
subactivity.putExtra(this.getString(R.string.send_string), "送られる文字列");
の1行が加わっただけです。

受け取る側
SubActivity.javaのソース
package com.secondScreen;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SubActivity extends Activity {
 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
        
        //送られてくる文字列を受け取る
        String displayMessage = getIntent().getStringExtra(this.getString(R.string.send_string));
        
        //表示されるテキストに送られてきた文字列を設定
        TextView message = (TextView)this.findViewById(R.id.sub_text);
        message.setText(displayMessage);
    }
}

ダウンロード

画面遷移(移動)

アプリケーション内で別アクティビティを起動させます。

プロジェクトを作成
プロジェクト名:SecondScreen
ビルドターゲット:Android 2.2
プロパティー
アプリケーション名:SecondScreen
パケージ名:com.secondScreen
Create Activity:SecondScreen
Min SDK Version:8



res/layout/main.xml にボタンを配置
ボタンが押された時の動作をOn click に設定する。
設定する値はButtonOnClick

res/layout/main.xml をコピーしてsub.xml を作成し、内容を変更して第2画面を作る。

最初の画面のアクティビティSecondScreen.java をコピーして
SubActivity を作成し、ソースを変更し第2画面のアクティビティを作る。
変更する部分:
setContentView(R.layout.main); を
setContentView(R.layout.sub); に変更する。
AndroidManifest.xml にSubActivityを加える


SecondScreen.java にボタンが押された時の動作を設定する。

SecondScreen.javaのソース
package com.secondScreen;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class SecondScreen extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    public void ButtonOnClick(View v){
     Intent subactivity = new Intent(this,com.secondScreen.SubActivity.class);
     startActivityForResult(subactivity, R.id.button1);
    }
}

sub.xmlのボタンに android:onClick="ButtonOnClick" を付け加えるのを忘れないように ダウンロード

サウンドファイルを指定したインテント

プロジェクト名:SelectMusic
ビルドターゲット:Android 2.2
プロパティー
アプリケーション名:SelectMusic
パケージ名:com.selectMusic
Create Activity:SelectMusic
Min SDK Version:8

ダウンロード


ボタンに表示するテキストは、
res/values/strings.xml で設定

ボタンがタップされた時の動作は
res/layout/main.xml  のOn click でイベントで設定

SelectMusic.java
package com.selectMusic;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class SelectMusic extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    public void selectMusic(View v){
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("audio/*");
        startActivity(Intent.createChooser(intent, "音楽ファイルを選択"));

    }
}

2011年5月25日水曜日

ウェブブラウザーを起動する-ボタンで


プロジェクト名:WebBrowser
ビルドターゲット:Android 2.2
プロパティー
アプリケーション名:WebBrowser
パケージ名:com.webBrowser
Create Activity:WebBrowser
Min SDK Version:8

res/layout/main.xml に
ボタンを追加する。
ボタンのプロパティー設定で
ボタンに表示する文字を設定し、
On click でイベントを関連付ける。

res/values/strings.xml にボタンに表示する文字とブラウザで開くURLを設定する。

package com.webBrowser;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;

public class WebBrowser extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

 public void webOpen(View v) {
  Uri myUri = Uri.parse(this.getString(R.string.myURL));
  Intent webIntent = new Intent(Intent.ACTION_VIEW, myUri);
  startActivity(webIntent);
 }
}

ダウンロード

OnClickListenerを使う

package com.Btn001;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Btn001 extends Activity implements OnClickListener {
 private TextView message;
 private Button setButton;

 // private Button setButton;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  message = (TextView) this.findViewById(R.id.Message);
  setButton = (Button) this.findViewById(R.id.SetButton);
  setButton.setOnClickListener(this);
 }

 @Override
 public void onClick(View v) {
  /** ボタンを押したときの処理 **/
  if ( v == setButton) {
  message.setText("新しいテキスト");
  }
 }
}

EventListenerを定義する方法

setButtonに対して、OnClickListenerを定義する方法
package com.Btn001;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Btn001 extends Activity {
 private TextView message;
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  
  message = (TextView)this.findViewById(R.id.Message);
  Button setButton = (Button) this.findViewById(R.id.SetButton);
  
  setButton.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
    /** ボタンを押したときの処理 **/
    message.setText("新しいテキスト");
   }
  });

 }

}

ボタンを押してテキスト変更-On clickを使う

javaファイルの変更
package com.Btn001;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class Btn001 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

 public void SetButtonOnClick(View v) {
  TextView message;
  message = (TextView)this.findViewById(R.id.Message);
  message.setText("新しいテキスト");
 }
}

XMLレイアウトの
テキストのプロパティー ID に Message を設定する
ボタンのプロパティ On click に SetButtonOnClick を設定する

2011年5月24日火曜日

ボタンに表示する文字の変更



プロパティーで直接指定する方法

アウトラインでbutton1をダブルクリックしてプロパティーを表示して、Text プロパティーの値を修正する。

res/values/strings.xml ファイルから読み込む方法
パッケージエクスプローラでstrings.xmlをダブルクリックして編集可能にする。
追加ボタンをクリックする。

String をせんたくして OK をクリックする。
 

Name* に btn_name
Value* に ボタン
と入力してファイルを保存する。


アウトラインでbutton1 を右クリックする。

btn_name を選択して OK をクリックする


テキストプロパティーが@string/btn_name に変わってます。

ボタンの追加

Andriod プロジェクトを作成する。
プロジェクト名:btn001

内容
ワークスペース内に新規プロジェクトを作成
デフォルト・ロケーションの使用

ビルド・ターゲット
Android 2.2

プロパティー
アプリケーション名:Btn001
パッケージ名:com.Btn001
Create Activity:Btn001
Min SDK Version:8

resフォルダの中のlayoutフォルダの中のmain.xmlを開いて
アウトラインを確認すると
LinearLayout の中にTextViewが作成されています。

パレットのForm Widgets の中からボタンを画面の上にドラッグします。
LinearLayout の中にTextViewの下にbutton1が追加されました。


ボタンが追加されました


2011年5月23日月曜日

自分でAndroidプロジェクトを作成する

Android DevelopersResourcesHello World を参考にやってみる。

ファイル-新規-Androidプロジェクト でプロジェクトを作成


実行-Andoroidプロジェクト でシュミレーターを実行させる


MENUボタンをクリック
下の画面が表示されるまで約4分かかった。