SQLの窓 タグページ
 
Custom Search

2012年05月26日


できるだけ難しい事をせずに、Android のリストビューでタイトルをクリックしたらそのページを表示する( 自前のオブジェクトを ArrayAdapter にセットする )

ぱっと見、どう考えても toString() さえ実装されていたら、表示は勝手にやってくれると思ったので、『できるだけ難しい事をせずに、Android のリストビューでタイトルをクリックしたらそのページを表示する』を少し変更しましたが、予想通りでした。JSON からの読み込みは自前のアダプタが必要そうですが、前よりは Java らしくなりました。


package lightbox.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.TextView;
import android.view.*;

import android.util.Log;
import android.content.*;
import android.net.*;

public class LightActivity extends Activity {
    /** Called when the activity is first created. */
	
	private static final String DEBUG_TAG = "ListView :";

	// ArrayAdapter 用プライベートクラス
    private class MyLinkData {
    	private String _myText;
    	private String _myUrl;
    	
    	MyLinkData( String dataUrl, String dataText ) {
    		_myText = dataText;
    		_myUrl = dataUrl;
    	}
    	public String toString() {
    		return _myText;
    	}
    	public String getUrl() {
    		return _myUrl;
    	}
    }
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // リストビューに表示させる文字列の配列( URL )
        final MyLinkData[] myLinks = {
        		new MyLinkData( "http://winofsql.jp","SQLの窓" ),
        		new MyLinkData( "http://logicalerror.seesaa.net/","logical error"),
   				new MyLinkData( "http://nurd.seesaa.net/","琴線に触れる"),
   				new MyLinkData( "http://ginpro.winofsql.jp/","GINPRO")
        };

        // リストビュー用のアダプターを作成
        ArrayAdapter<MyLinkData> adapter = new ArrayAdapter<MyLinkData>(this, android.R.layout.simple_list_item_1);
        for( int i = 0; i < myLinks.length; i++ ) {
        	// 配列の内容をセット
            adapter.add( myLinks[i] );
        }
        // リストビューを作成
        ListView listView = new ListView(this);
        this.addContentView(
        		listView, 
        		new ViewGroup.LayoutParams (
        				ViewGroup.LayoutParams.FILL_PARENT,
        				ViewGroup.LayoutParams.FILL_PARENT
        		)
        );
        
        // リストビューにデータ( アダプター ) をセット
        listView.setAdapter(adapter);
 
        // リストビューのアイテムがクリックされた時の処理
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
            	
                ListView listView = (ListView) parent;
                // クリックされたアイテムを取得
                // MyLinkData をセットしているので、MyLinkData として取り出す
                MyLinkData item = (MyLinkData) listView.getItemAtPosition(position);
                // LogCatに表示
				Log.i(DEBUG_TAG, item.getUrl());
				Log.i(DEBUG_TAG, item.toString());
				Log.i(DEBUG_TAG, Integer.toString(position));
				
				// URL を開く
				startActivity( new Intent(Intent.ACTION_VIEW,Uri.parse(item.getUrl())) );				
               
            }
        });        
    }
}



【記録の最新記事】
posted by at 23:36 | 記録 | このブログの読者になる | 更新情報をチェックする



できるだけ難しい事をせずに、Android のリストビューでタイトルをクリックしたらそのページを表示する



これでは、リストビュー内のコンテンツに汎用性が全くありませんが、そういう複雑なリストビューはきちんと設計して誰でも使えるようにするべきなので、これはこれである意味汎用性があると思います。

※ Log.i は、Microsoft の Live SDK の Android サンプルで使われていたので使ってみました。




package lightbox.test;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.TextView;
import android.view.*;

import android.util.Log;
import android.content.*;
import android.net.*;

public class LightActivity extends Activity {
    /** Called when the activity is first created. */
	
	private static final String DEBUG_TAG = "ListView :";
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        // リストビューに表示させる文字列の配列( URL )
        final String[] myLinks = {
        		"http://winofsql.jp","SQLの窓",
        		"http://logicalerror.seesaa.net/","logical error",
        		"http://nurd.seesaa.net/","琴線に触れる"
        		};
        

        // リストビュー用のアダプターを作成
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        for( int i = 0; i < myLinks.length/2; i++ ) {
        	// 配列の内容をセット
            adapter.add( myLinks[2*i+1] );
        }
        // リストビューを作成
        ListView listView = new ListView(this);
        this.addContentView(
        		listView, 
        		new ViewGroup.LayoutParams (
        				ViewGroup.LayoutParams.FILL_PARENT,
        				ViewGroup.LayoutParams.FILL_PARENT
        		)
        );
        
        // リストビューにデータ( アダプター ) をセット
        listView.setAdapter(adapter);
 
        // リストビューのアイテムがクリックされた時の処理
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
            	
                ListView listView = (ListView) parent;
                // クリックされたアイテムを取得
                String item = (String) listView.getItemAtPosition(position);
                // LogCatに表示
				Log.i(DEBUG_TAG, item);
				Log.i(DEBUG_TAG, Integer.toString(position));
				
				// クリックされたアイテムに対応する URL を取得
				String target = myLinks[2*position];
                // LogCatに表示
				Log.i(DEBUG_TAG, target);

				// URL を開く
				startActivity( new Intent(Intent.ACTION_VIEW,Uri.parse(target)) );				
               
            }
        });        
    }
}

※ 配列部分を外部 JSON にすれば読み替えは簡単にできる予定。


posted by at 01:56 | Android | このブログの読者になる | 更新情報をチェックする


2012年05月25日


Eclipse から SIM フリーの実機( Rstream A1 : Android 2.1 ) を使ってアプリのテスト

関連する記事

Android エミュレータ単独利用
Eclipse から Android エミュレータを使う

関連するページ

スマートフォンをインターネットにつなぐ方法 | BUFFALO バッファロー

Rstream A1(Android 2.1) は、ソフマップで売られている 7,980円の SIM フリーの Android 機です。
ドライバのインストール PC からアクセスする為に、なんらかのドライバが必要のようです。詳細な裏付けを取ったわけではありませんが、経験則的にそのようです。USB で接続すると、エクスプローラからアクセスできるので、以下のようにして setup.exe を起動します 実行すると、以下のようなダイアログが表示されて、何故かプログレス表示が止まってしまいます。この後『次』を選ぶとまた同様のダイアログが表示されて、最後にはツールのダイアログが表示されますが、これは閉じて下さい。( 次回からは、Setup.exe を実行するとこのツールダイアログが出ますが、その時に PC から認識されます / 内部から何か呼び出しているようです ) たぶんこの過程のどこかでドライバがインストールされたものと思われます。 minSdkVersion の設定 AndroidManifest.xml を選択して、Manifest タブから設定します Android 2.1 は、API Version 7 なので、ここがこれより大きい数字になっていると転送されません。この値の初期値は、プロジェクトを作成した時のターゲットバージョンなので、他のプロジェクトを転用した時に注意が必要です。( ターゲットのバージョンは、プロジェクトのプロバティから変更できます ) デバッグ可能にする Application タブから設定して下さい ( 画像の位置とは限らないので注意して下さい ) デバイスを選択して実行する デバイス側の設定 アプリを自由に登録できるように、提供元不明のアプリにチェックを入れます。さらに開発メニューから USB デハッグをチェックして、充電中に画面をスリープにしないようにしておけば、USB をつないでいる間は画面が消えなくなります。USB 接続中は左側二つの設定で良いですが、カメラ等で USB を外してテストする場合の為、バックライトを常時点灯にしておきます( そうするとトップ画面以外では自動的にはスリープしないと思います )
実行結果
package lightbox.test;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.TextView;
import android.view.*;

public class LightActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
        for( int i = 0; i < 10; i++ ) {
            adapter.add( ((Integer)(i+1)).toString() );
        }
        ListView listView = new ListView(this);
        this.addContentView(
        		listView, 
        		new ViewGroup.LayoutParams (
        				ViewGroup.LayoutParams.FILL_PARENT,
        				ViewGroup.LayoutParams.FILL_PARENT
        		)
        );
        listView.setAdapter(adapter);
        
    }
}

画面のキャプチャ

デバッグ用のツールとして DDMS が利用できますが、Eclipse から使うと簡単にキャプチャが可能になります。









関連する記事

7,980円の Rstream A1 をソフマップで買っちゃいました



posted by at 20:33 | Android | このブログの読者になる | 更新情報をチェックする


2012年05月23日


Windows8 で SkyDrive にアップロードするサンプル


起動後の画面です。サインインを実行むしてからアップロードボタンをクリックしてアップロードするファイルを選択します



まずはサインイン





サインインが完了したのでメッセージを表示しています。
( ここまでで、▲ リンク先と同じです )



▲ アップードボタンをクリックすると、▼ に画面が切り替わります。





ファイルを選択し終わりましたので、『開く』でアップロードが開始されます。終了メッセージの表示を実装していないので、Debug.writeln の結果で確認します。






ソースコードを見る
posted by at 10:59 | Windows8 Metro(JS) | このブログの読者になる | 更新情報をチェックする


2012年05月21日


Windows8 Metro(JS) で LiveSDK を使って signin してテキスト表示するだけのサンプルコードの実行

Live SDK のダウンロードとインストール

まず、『Live SDK for Windows and Windows Phone』をダウンロードしてインストールします。



アプリを登録

Windows8(コンシューマ) + VisualStudio 11 でプロジェクトを作成してから、Live Connect のアプリ管理 (英語) サイトで、Metro スタイル アプリをマイクロソフトのクラウド サービスにアクセスするように構成します。( アプリケーション名を登録して、ID を取得する ) 

以下の画像の一番下の部分(2つ)に、アプリケーション名( ここでは SkyApp )と、サンプル通りの Publisher として CN=lightbox と入力しました。



この後でパッケージ名が表示されるので、それを Visual Studio のほうにセットします。この内容は記録しなくても、以下のページで確認できます。

▼ 登録後の状態です。



Visual Studio より参照設定

SDK を使用するように構成します



実際の実行の画面遷移





Windows Live から見たアプリの管理画面

プロフィールから『管理』へ移動するとアプリの一覧が表示されて個別に管理できます。最初のほうの詳細情報はアプリを作った開発者が利用する画面で、こちらは使用するユーザが管理する画面です( Twitter と同じです )



ソースコード
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <meta charset="utf-8">
    <title>SkyApp</title>

    <!-- WinJS references -->
    <link href="//Microsoft.WinJS.0.6/css/ui-dark.css" rel="stylesheet">
    <script src="//Microsoft.WinJS.0.6/js/base.js"></script>
    <script src="//Microsoft.WinJS.0.6/js/ui.js"></script>

    <script src="///LiveSDKHTML/js/wl.js"></script>

    <!-- SkyApp references -->
    <link href="/css/default.css" rel="stylesheet">
    <script src="/js/default.js"></script>
</head>
<body>
    <h1>JavaScript Code Sample</h1>
    <div id="signin"></div>
    <label id="info"></label>
    <script>
        WL.Event.subscribe("auth.login", onLogin);
        WL.init({
            scope: ["wl.signin", "wl.basic"]
        });
        WL.ui({
            name: "signin",
            element: "signin"
        });
        function onLogin() {
            WL.api({
                path: "me",
                method: "GET"
            }).then(
                function (response) {
                    document.getElementById("info").innerText =
                        "Hello, " + response.first_name + " " + response.last_name + "!";
                },
                function (responseFailed) {
                    document.getElementById("info").innerText =
                        "Error calling API: " + responseFailed.error.message;
                }
            );
        }
    </script>
</body>
</html>

※ こちらにあったソースでテストしました

関連する Microsoft のページ

Live SDK による Windows 8 アプリへのシングル サインオン機能の実装と SkyDrive との連携



posted by at 16:09 | Windows8 Metro(JS) | このブログの読者になる | 更新情報をチェックする