ListView を BaseAdapter を使った時で、getView の戻り値に null を返した行は、空白の行が
表示されてしまう。
NULL を返さないようなリストを用意するべきなのだが、
どうしても表示するものが割り当てられない場合、空行ではなく詰めたい場合は、
空のレイアウトを割り当てれば良い。
以下のような、blanklayout.xml を用意する。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
BaseAdapater で どうしても表示できない行を、以下の例のように
LayoutInflater で、NULLを指定する。
ListView listview = (ListView)findViewById(R.id.listView);
final PackageManager packageManager = getPackageManager();
final LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
listview.setAdapter(new BaseAdapter(){
@Override
public View getView(int position,View view,ViewGroup parent){
if (view==null){
View newview = layoutInflater.inflate(android.R.layout.simple_list_item_2,null);
RunningAppProcessInfo runingAppProcessinfo = list.get(position);
try{
ApplicationInfo appInfo = packageManager.getApplicationInfo(runingAppProcessinfo.processName,0);
*1.setText(packageManager.getApplicationLabel(appInfo));
*2.setText(appInfo.packageName);
}catch(NameNotFoundException e){
return layoutInflater.inflate(R.layout.blanklayout,null);
}
return newview;
}
return view;
}
@Override
public long getItemId(int position){
return position;
}
@Override
public Object getItem(int position){
return position;
}
@Override
public int getCount(){
return list.size();
}
});