Android: ListActivityによりContentProviderのデータを表形式で表示

AndroidのListActivityを使い、ContentProviderから取得したデータを表形式で表示するサンプルです。
今回のサンプルは前回作成 ContentProviderSampleのContentProviderにアクセスして全データを取得し、それをListActivityにより表形式で表示します。


[ アプリの内容 ]
今回のサンプル ListActivitySample は、前回のブログ記事「ContentProviderとSQLiteでデータの登録・削除・検索」で作成したサンプルContentProviderSampleのContentProviderにアクセスして全データを取得し、それをListActivityにより表形式で表示します。
表示ボタンを押すと、ContentProviderを持つContentProviderSampleも起動します。

表のレイアウトはmain.xmlとlist.xmlの2つのレイアウトファイルで、< ListView >の指定によって定義しています。

該当する行をクリックするとブラウザが起動してURLで指定されたページが開くようにするとより良くなるのですが、それは次の機会にやろうと思います。

[ 参考URL ]
ListActivityについて:
http://developer.android.com/reference/android/app/ListActivity.html

An activity that displays a list of items by binding to a data source such as an array or Cursor, and exposes event handlers when the user selects an item.

SimpleCursorAdapterについて:
http://developer.android.com/reference/android/widget/SimpleCursorAdapte...

An easy adapter to map columns from a cursor to TextViews or ImageViews defined in an XML file.

http://d.hatena.ne.jp/clomie_p/20101010/1286700914
http://d.hatena.ne.jp/clomie_p/20101009/1286642748

[サンプルのコード ]
ListActivitySample.java

package jp.knowd.ListActivitySample;

import android.os.Bundle;
import android.widget.SimpleCursorAdapter;
import android.app.ListActivity;
import android.view.View;
import android.database.Cursor;
import android.net.Uri;
import android.widget.Button;
import android.view.View.OnClickListener;

public class ListActivitySample extends ListActivity {
	
	/** ContentProviderのカラム名 */
	private static final String[] FROM = { "_ID", "col2", "col3" };
	/** AdapterでバインドするViewのID */
	private static final int[] TO = { R.id.col1, R.id.col2, R.id.col3 };

	private SimpleCursorAdapter adapter;
	private Cursor mc;
	private Uri uri;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
       uri = Uri.parse("content://jp.knowd.helloprovider");
       Button btnConv1 = (Button)findViewById(R.id.btnConv1);
       Button btnConv2 = (Button)findViewById(R.id.btnConv2);
       
       // データ表示ボタンのイベントを設定
       btnConv1.setOnClickListener(new OnClickListener(){
          public void onClick(View v) {     
            mc = managedQuery(uri, null, null, null, null);
		     adapter = new SimpleCursorAdapter(getApplicationContext(), 
							  R.layout.list, mc, FROM, TO);
		     setListAdapter(adapter);
           }
         }); 
       
       // データ非表示ボタンのイベントを設定   
       btnConv2.setOnClickListener(new OnClickListener(){
          public void onClick(View v) {     
            mc = managedQuery(uri, null, "_ID='0'", null, null);
		     adapter = new SimpleCursorAdapter(getApplicationContext(), 
							  R.layout.list, mc, FROM, TO);
		     setListAdapter(adapter);
           }
         });  
	}
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >>
    
<TextView  
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="[ My Favorite Blogs ]"
    android:textSize="18sp"
    android:textStyle="bold"
    />
    
<LinearLayout
	 android:orientation="horizontal"
	 android:layout_width="match_parent"
	 android:layout_height="wrap_content">  
    
   <Button
       android:id="@+id/btnConv1"
       android:layout_width="210px"
       android:layout_height="60px"
       android:text="データ全件表示"
       android:textSize="11sp"
    />

    <Button
       android:id="@+id/btnConv2"
       android:layout_width="210px"
       android:layout_height="60px"
       android:text="データ非表示(0件検索)"
       android:textSize="11sp"
    />
</LinearLayout>	
    
<TextView  
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    />
        
<ListView
	android:id="@android:id/list"
	android:layout_width="match_parent"
	android:layout_height="wrap_content" />
	
</LinearLayout>>

list.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content">
		
	<LinearLayout
	   android:orientation="horizontal"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content">
		
	<TextView
		android:id="@+id/col1"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:paddingRight="5sp"
		android:textSize="17sp"
                android:textStyle="bold"
	/>
	
	<TextView
		android:layout_width="1px"
		android:layout_height="wrap_content"
		android:background="#7f7f7f"
	/>
   
	<TextView
		android:id="@+id/col2"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:paddingLeft="5sp"	
		android:textSize="17sp"
                android:textStyle="bold"
	 />
		
	</LinearLayout>
		
	<TextView
		android:id="@+id/col3"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"
		android:paddingLeft="5sp"
		android:textSize="17sp" />
		
</LinearLayout>