ListViewで、実行中のServicesを取得したりするテスト


2014年4月21日現在、私が理解している内容です。
間違っている場合があります。


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<String> getServiceList1 = new ArrayList<String>(); //androidで起動しているサービス情報のリストを取得する準備 ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); //サービスをrunningServiceList1に取得 List<RunningServiceInfo> runningServiceList1 = activityManager.getRunningServices(Integer.MAX_VALUE); //runningServiceList1が空でなければ、サービスの名前をgetServiceList1に追加していく if(runningServiceList1 != null) { for(RunningServiceInfo runServInfo : runningServiceList1) { getServiceList1.add(runServInfo.service.getShortClassName()); } } //リストをリストビューに渡す準備 ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(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<String> getServiceList1 = new ArrayList<String>(); ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); List<RunningServiceInfo> runningServiceList1 = activityManager.getRunningServices(Integer.MAX_VALUE); if(runningServiceList1 != null) { for(RunningServiceInfo runServInfo : runningServiceList1) { getServiceList1.add(runServInfo.service.getShortClassName()); } } //リストをリストビューに渡す準備 ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(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<String> getServiceList1 =null; private ArrayAdapter<String> 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<String>(); ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); List<RunningServiceInfo> runningServiceList1 = activityManager.getRunningServices(Integer.MAX_VALUE); if(runningServiceList1 != null) { for(RunningServiceInfo runServInfo : runningServiceList1) { getServiceList1.add(runServInfo.service.getShortClassName()); } } //サービス情報をリストに取得 adapter1 = new ArrayAdapter<String>(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<String> getServiceList1 =null; private ArrayAdapter<String> 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<String>(); ActivityManager activityManager = (ActivityManager)getSystemService(ACTIVITY_SERVICE); List<RunningServiceInfo> runningServiceList1 = activityManager.getRunningServices(Integer.MAX_VALUE); if(runningServiceList1 != null) { for(RunningServiceInfo runServInfo : runningServiceList1) { getServiceList1.add(runServInfo.service.getShortClassName()); } } //サービス情報をリストに取得 adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, getServiceList1); listvw1.setAdapter(adapter1); } }

















戻る