Как получить значок запущенных приложений и сохранить в Array_list?
Я хочу, чтобы значок запуска приложений и отображался в listView. Я могу получить название приложений. И я покажу в виде списка, но я использую следующий код Manager.java
public class Manager {
//other methods
public ArrayList<Drawable> getListApp()
{
my_packge_name=new ArrayList<String>();
my_packge_icon=new ArrayList<Drawable>();
PackageManager pm = base_context.getPackageManager();;
ActivityManager am=(ActivityManager) base_context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();
for (int i = 0; i < runningAppProcessInfo.size(); i++)
{
String s=runningAppProcessInfo.get(i).processName;
try {
ApplicationInfo ap= pm.getApplicationInfo(s, PackageManager.GET_META_DATA);
if( pm.getLaunchIntentForPackage(ap.packageName) != null ){
String currAppName = pm.getApplicationLabel(ap).toString();
Drawable icon=pm.getApplicationIcon(ap);
my_packge_icon.add(icon);
// my_packge_name.add(currAppName);
//This app is a non-system app
}
return my_packge_icon;
}
List.java
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_manager);
list=(ListView)findViewById(R.id.listView1);
arr_icons= new ArrayList<Drawable> (new Manager(getBaseContext()).getListApp());
adapter=new Myadapter(getBaseContext());
list.setAdapter(adapter);
}
в GetView
if(convertView==null)
{
Holder=new ViewHolder();
convertView=myInflater.inflate(R.layout.custom_item_listview,null );
Holder.title=(TextView)convertView.findViewById(R.id.title);
Holder.icon=(ImageView)findViewById(R.id.image_icon);
convertView.setTag(Holder);
}
else
Holder=(ViewHolder) convertView.getTag();
Holder.icon.setImageDrawable(arr_icons.get(position));
}
ошибка:
Java.lang.NullPointerException.....
При названии всех программ я запускаю правильно. Но при всех значках программ, которые я получил эту ошибку. Я не знаю, почему массив не инициализирован.
2 ответа
Решение
При условии, что image_icon
принадлежит custom_item_listview.xml
Holder.icon=(ImageView)findViewById(R.id.image_icon);
неправильно. Так должно быть
Holder.icon=(ImageView)convertView.findViewById(R.id.image_icon);
как для вашего TextView
Holder.icon
является null
. Попробуйте проверить идентификатор.