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

}

}

  • Posted by heikyo
  • Comment(6)
  • TB(0)
  • 23:30 | Edit

[Android] 続・Android SDKをアップロードした時に気をつけること

前回の日記 - Android SDKをアップロードした時に気をつけることでとりあえず開発が再開できると思ったら、xmlファイルが開けなくなった。

 

解決策 


ターミナルで
/Applications/eclipse/eclipse -clean
を実行したら解決!!
  • Posted by heikyo
  • Comment(0)
  • TB(0)
  • 18:45 | Edit

[Android] Android SDKをアップロードした時に気をつけること

Android SDKを「revision10」にアップロードして、「Android SDK and AVD Manager」を開こうとすると、「This Android SDK requires Android Developer Toolkit version 10.0.0 or above. Current version is 9.0.0.v201101191456-93220. Please update ADT to the latest version.」的なエラーが出た。


解決策


「ヘルプ」-->「新規ソフトウェアのアップデート...」の
「すでにインストールされている」をクリック。
20)

すると、 「Elipse インストール詳細」ページが開かれるので、バージョンが「9.0.0.v201101191456-93220」になっているのを選択し、「更新...」ボタンをクリック。
 22)

更新が始まります。更新中に、Eclipseを再起動しますかと聞かれますが、再起動してOKです。

 これで、「Android SDK and AVD Manager」が開けました。
  • Posted by heikyo
  • Comment(4)
  • TB(0)
  • 18:15 | Edit

[Android] エミュレータでMAPを表示するときに気をつけること

久々にエミュレータでMAPを表示させようとしたら
"INSTALL_FAILED_MISSING_SHARED_LIBRARY"ってエラーが
出た。

MAPを表示させるには、エミュレータのターゲットが「Androidx.x」の方じゃなくて、 「Google APIs」だったの忘れてたー。


java

















あと、AndroidManigest.xmlの<application>の中に
<uses-library android:name="com.google.android.maps"/>

と、<manifest>の中に
<uses-permission android:name="android.permission.INTERNET"/> 

を入れるのを忘れずに~
  • Posted by heikyo
  • Comment(0)
  • TB(0)
  • 23:30 | Edit

[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" <--------この部分を追加
/> 


これで解決。
  • Posted by heikyo
  • Comment(0)
  • TB(0)
  • 23:00 | Edit
プロフィール

heikyo (インドア五段)
酒井 喬平/kyohei sakai
1987/6/21
Twitter&nbsp;&nbsp;facebook

記事検索
カテゴリ別アーカイブ
  • ライブドアブログ
heikyoのblog