heikyoのblog

[Android] ListViewでの画面遷移

前に書いたSQLiteデータベースを作成して、ListViewで一覧表示するをベースに、球団名をクリックすると、そのチームに所属する選手を画面遷移でListViewに表示してみた。


チーム一覧
04)

「東京スーパースターズ」をクリックすると、下の画面のように画面遷移します。
23)


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));

}

}

[Android] listviewでスクロールすると画面が真っ暗になる

作成中のアプリを実機で見てみると、ListViewの画面でスクロールすると、画面が真っ黒になった。

<解決方法
ListViewを使っているXMLファイルに以下を追加する。
android:scrollingCache="false"

こんな感じで。

<ListView 

android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="#000000"
android:dividerHeight="0.1dip"
android:scrollingCache="false" <--------この部分を追加
/> 


これで解決。
livedoor プロフィール
記事検索
カテゴリ別アーカイブ
  • ライブドアブログ
heikyoのblog