ListViewの使い方と、Servicesを取得するサンプル
今回は、androidで稼動中のServicesを取得して、ListViewに表示するというテストです。
次のようにすると、Servicesをリストに取得して表示できます。
表示するだけなので、とくに何もできません。
package com.example.test16;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getServiceList1というリストを準備
ArrayList getServiceList1 = new ArrayList();
//androidで起動しているサービス情報のリストを取得する準備
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
//サービスをrunningServiceList1に取得
List runningServiceList1 = activityManager.getRunningServices(Integer.MAX_VALUE);
//runningServiceList1が空でなければ、サービスの名前をgetServiceList1に追加していく
if(runningServiceList1 != null) {
for(RunningServiceInfo runServInfo : runningServiceList1) {
getServiceList1.add(runServInfo.service.getShortClassName());
}
}
//リストをリストビューに渡す準備
ArrayAdapter adapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, getServiceList1);
//リストビューを作る
ListView listvw1 = new ListView(this);
//リストビューに、リストデータをセット
listvw1.setAdapter(adapter1);
//表示する
setContentView(listvw1);
}
}
| |
ListViewで操作する
リストを選択して何かするためには、ListViewでリスナーを登録します。
「setOnItemClickListener」を登録すると、リストをクリックして何か実行させることができます。
package com.example.test17;
import java.util.ArrayList;
import java.util.List;
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.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//androidで起動しているサービス情報のリストを取得
ArrayList getServiceList1 = new ArrayList();
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
List runningServiceList1 = activityManager.getRunningServices(Integer.MAX_VALUE);
if(runningServiceList1 != null) {
for(RunningServiceInfo runServInfo : runningServiceList1) {
getServiceList1.add(runServInfo.service.getShortClassName());
}
}
//リストをリストビューに渡す準備
ArrayAdapter adapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, getServiceList1);
//リストビューを作る
ListView listvw1 = new ListView(this);
//リストビューに、リストデータをセット
listvw1.setAdapter(adapter1);
//表示する
setContentView(listvw1);
//----------------------------------
//リストビューをクリックした?
listvw1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view,int position, long id) {
ListView Lv = (ListView) parent;
String item = (String) Lv.getItemAtPosition(position);
if(item != null){
Toast.makeText(MainActivity.this, item, Toast.LENGTH_SHORT).show();
}
}
});
}
}
| |
ListViewに、ヘッダーとかフッターをつける
「addHeaderView」「addFooterView」で、リストの前後にビューを追加できます。
「リストを読み込み中」などの表示の演出ができます。
ここでは、ヘッダーにボタンを追加してみました。
フッターにアイコンを表示してみました。
ヘッダーとフッターは、「setAdapter」よりも先に追加しなければいけません。
リストをクリックすると、クリックされた文字列が「〜クリックされた」となり、
「〜追加された」というリストがひとつ増えます。
ボタンを押すと元に戻ります。
MainActivity.java
package com.example.test18;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ArrayList getServiceList1 =null;
private ArrayAdapter adapter1 = null;
private ListView listvw1 = null;
private ImageView imgvw ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//親レイアウト
LinearLayout layout2 = new LinearLayout(this);
layout2.setOrientation(LinearLayout.VERTICAL); //縦に並ぶ
LinearLayout layout1 = new LinearLayout(this);
layout1.setOrientation(LinearLayout.HORIZONTAL); //横に並ぶ
//リストビューを用意
listvw1 = new ListView(this);
//アイコン画像を用意
Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
imgvw = new ImageView(this);
imgvw.setImageBitmap(image);
imgvw.setScaleType(ImageView.ScaleType.FIT_XY);
imgvw.setAdjustViewBounds(true);
Button button1 = new Button(this);
button1.setText("SERVICES LIST");
button1.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
//ボタンが押されたサービス情報を再取得
Get_ServicesList1();
}
});
//リストにアイコン画像を追加するテスト//setAdapterよりも先に追加
listvw1.addHeaderView(button1);
listvw1.addFooterView(imgvw);
//サービス情報をリストに取得
Get_ServicesList1();
//リストをクリックした?
listvw1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view,int position, long id) {
ListView Lv = (ListView) parent;
String item = (String) Lv.getItemAtPosition(position);
if(item != null){
Toast.makeText(MainActivity.this, item, Toast.LENGTH_SHORT).show();
//クリックされたアイテムの削除 と追加とリストビューの更新
adapter1.remove(item);
adapter1.add(item + "クリックされた");
adapter1.add(item + "追加された");
adapter1.notifyDataSetChanged();
listvw1.invalidateViews();
}
}
});
//リストとかレイアウトを表示
layout2.addView(layout1);
layout2.addView(listvw1);
setContentView(layout2);
}
public void Get_ServicesList1(){
//androidで起動しているサービス情報を取得
getServiceList1 = new ArrayList();
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
List runningServiceList1 = activityManager.getRunningServices(Integer.MAX_VALUE);
if(runningServiceList1 != null) {
for(RunningServiceInfo runServInfo : runningServiceList1) {
getServiceList1.add(runServInfo.service.getShortClassName());
}
}
//サービス情報をリストに取得
adapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, getServiceList1);
listvw1.setAdapter(adapter1);
}
}
| |
いろいろ試してみる
「setOnScrollListener」で、ListViewがスクロールした状態を知ることができます。
スクロールして、どの位置にいるかとか、指でスクロールされているところとか。
ほかに、「setOnItemSelectedListener」「onNothingSelected」「onItemLongClick」というのもあります。
ヘッダー、フッターを消すには、「removeHeaderView」「removeFooterView」を使います。
MainActivity.java
package com.example.test19;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private ArrayList getServiceList1 =null;
private ArrayAdapter adapter1 = null;
private ListView listvw1 = null;
private ImageView imgvw ;
TextView text1;
TextView text2;
TextView text3;
TextView text4;
TextView text5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//親レイアウト
LinearLayout layout2 = new LinearLayout(this);
layout2.setOrientation(LinearLayout.VERTICAL); //縦に並ぶ
LinearLayout layout1 = new LinearLayout(this);
layout1.setOrientation(LinearLayout.HORIZONTAL); //横に並ぶ
//----------------------------------------------------
//リストビューを用意
listvw1 = new ListView(this);
//アイコン画像を用意
Bitmap image = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);
imgvw = new ImageView(this);
imgvw.setImageBitmap(image);
imgvw.setScaleType(ImageView.ScaleType.FIT_XY);
imgvw.setAdjustViewBounds(true);
Button button1 = new Button(this);
button1.setText("SERVICES LIST");
//リストにアイコン画像を追加するテスト//setAdapterよりも先に追加
listvw1.addHeaderView(button1);
listvw1.addFooterView(imgvw);
//サービス情報をリストに取得
Get_ServicesList1();
//----------------------------------------------------
//ボタンとかテキストとか追加
button1.setOnClickListener( new OnClickListener() {
@Override
public void onClick(View v) {
//ボタンが押されたサービス情報を再取得
Get_ServicesList1();
}
});
//数値表示テキストを作る
text1 = new TextView(this);
text1.setTextSize(10.0f);
layout1.addView(text1);
text2 = new TextView(this);
text2.setTextSize(10.0f);
layout1.addView(text2);
text3 = new TextView(this);
text3.setTextSize(10.0f);
layout1.addView(text3);
text4 = new TextView(this);
text4.setTextSize(10.0f);
layout1.addView(text4);
//----------------------------------------------------
//リストをスクロールした?
listvw1.setOnScrollListener(new OnScrollListener() {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
text1.setText(" first = " + String.valueOf(firstVisibleItem)); //先頭のリスト番号
text2.setText(" visible = " + String.valueOf(visibleItemCount)); //表示中のリスト数
text3.setText(" total = " + String.valueOf(totalItemCount)); //全リスト数
}
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
text5.setText(" L = " + arg0);
text4.setText(" Scroll = " + String.valueOf(arg1));
switch (arg1) {
case OnScrollListener.SCROLL_STATE_IDLE: //0=アイドル中
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: //1=スクロール中
break;
case OnScrollListener.SCROLL_STATE_FLING: //2=スクロールで指を離した
break;
}
}
});
//リストをクリックした?
listvw1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view,int position, long id) {
ListView Lv = (ListView) parent;
String item = (String) Lv.getItemAtPosition(position);
if(item != null){
Toast.makeText(MainActivity.this, item, Toast.LENGTH_SHORT).show();
//クリックされたアイテムの削除 と追加とリストビューの更新
adapter1.remove(item);
adapter1.add(item + "クリックされた");
adapter1.add(item + "追加された");
adapter1.notifyDataSetChanged();
listvw1.invalidateViews();
}
}
});
//リストとかレイアウトを表示
layout2.addView(layout1);
text5 = new TextView(this);
text5.setTextSize(15.0f);
layout2.addView(text5);
layout2.addView(listvw1);
setContentView(layout2);
}
public void Get_ServicesList1(){
//androidで起動しているサービス情報を取得
getServiceList1 = new ArrayList();
ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
List runningServiceList1 = activityManager.getRunningServices(Integer.MAX_VALUE);
if(runningServiceList1 != null) {
for(RunningServiceInfo runServInfo : runningServiceList1) {
getServiceList1.add(runServInfo.service.getShortClassName());
}
}
//サービス情報をリストに取得
adapter1 = new ArrayAdapter(this, android.R.layout.simple_list_item_1, getServiceList1);
listvw1.setAdapter(adapter1);
}
}
| |