チーム一覧
「東京スーパースターズ」をクリックすると、下の画面のように画面遷移します。
main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>
list_item.xml
ここではListViewの1行分のレイアウトをTextViewで定義します。<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_marginLeft="6px"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
DatabaseOpenHelper.java
前回とさほど変わらないが、「チーム名」を追加package jp.sample;
import android.content.ContentValues;import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseOpenHelper extends SQLiteOpenHelper {
// データベース名の定数
private static final String DB_NAME = "MEMBER";
// テーブル名
public static final String TABLE_NAME = "member";
// カラム名
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_POSITION = "position";
public static final String COLUMN_NUMBER = "number";
public static final String COLUMN_TEAM = "team";
/**
* 初期投入サンプルデータ
*/
private String[][] datas = new String[][]
{"山田太郎", "捕手", "2", "東京スーパースターズ"},
{"岩鬼正美", "三塁手", "5", "東京スーパースターズ"},
{"里中智", "投手", "1", "東京スーパースターズ"},
{"殿馬一人", "二塁手", "4", "東京スーパースターズ"},
{"微笑三太郎", "外野手", "7", "広島東洋カープ"}
};
/**
* コンストラクタ
*/
public DatabaseOpenHelper(Context context) {
// 指定したデータベース名が存在しない場合は、新たに作成されonCreate()が呼ばれる
// バージョンを変更するとonUpgrade()が呼ばれる
super(context, DB_NAME, null, 1);
}
/**
* データベースの生成に呼び出されるので、 スキーマの生成を行う
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.beginTransaction();
try{
// テーブルの生成
StringBuilder createSql = new StringBuilder();
createSql.append("create table " + TABLE_NAME + " (");
createSql.append(COLUMN_ID + " integer primary key,");
createSql.append(COLUMN_NAME + " text,");
createSql.append(COLUMN_POSITION + " text,");
createSql.append(COLUMN_NUMBER + " text,");
createSql.append(COLUMN_TEAM + " text");
createSql.append(")");
db.execSQL( createSql.toString());
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
// サンプルデータの投入
db.beginTransaction();
try{
for( String[] data: datas){
ContentValues values = new ContentValues();
values.put(COLUMN_NAME, data[ 0]);
values.put(COLUMN_POSITION, data[ 1]);
values.put(COLUMN_NUMBER, data[ 2]);
values.put(COLUMN_TEAM, data[ 3]);
db.insert(TABLE_NAME, null, values);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}
/**
* データベースの更新
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// データベースの更新
}
}
MemberList.java
チーム名を表示。そして、チーム名を選択して、選択したチーム名をインテントでMemberList2へ。package jp.sample;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
public class MemberList extends Activity implements OnItemClickListener{protected SQLiteDatabase db;
protected ListAdapter adapter;
protected ListView cigaretteList;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db = (new DatabaseOpenHelper(this)).getWritableDatabase();
cigaretteList = (ListView)findViewById(R.id.list);
Cursor c = db.query(true, "member", new String[] {"team"},
null, null, null, null, null, null);c.moveToFirst();
CharSequence[] list = new CharSequence[c.getCount()];
for (int i = 0; i < list.length; i++) {
list[i] = c.getString(0);
c.moveToNext();
}
c.close();
cigaretteList.setAdapter(new ArrayAdapter<CharSequence>(this,
R.layout.list_item, list));cigaretteList.setOnItemClickListener(this);
}
public void onItemClick(AdapterView<?> parent,
View view, int position, long id) {String team = (String)cigaretteList.getItemAtPosition(position);
Intent intent = new Intent(MemberList.this, MemberList2.class);
intent.putExtra("TEAM_NAME", team);
startActivity(intent);
}
}
MemberList2.java
MemberListから受け取ったチーム名をもつ選手をデータベースから検索して、表示させる。package jp.sample;import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MemberList2 extends Activity{
protected SQLiteDatabase db;
protected ListView cigaretteList;
protected String team;
public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
setContentView(R.layout.main);
db = (new DatabaseOpenHelper(this)).getWritableDatabase();
cigaretteList = (ListView)findViewById(R.id.list);
team = getIntent().getStringExtra("TEAM_NAME");
Cursor c = db.query("member", new String[] {"name"}, "team='" + team + "'",
null, null, null, null);c.moveToFirst();
CharSequence[] list = new CharSequence[c.getCount()];
for (int i = 0; i < list.length; i++) {
list[i] = c.getString(0);
c.moveToNext();
}
c.close();
cigaretteList.setAdapter(new ArrayAdapter<CharSequence>(this,
R.layout.list_item, list));}
}