Reputation: 510
ListView is displayed correctly. But when I click on the item it throws NullPointerException. What could be the cause? Thank you. ListView is displayed correctly. But when I click on the item it throws NullPointerException. What could be the cause? Thank you.
package com.example.nerdlauncher;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
public class NerdLauncherFragment extends ListFragment
{
private static final String TAG = "NerdLauncherFragment";
public ArrayList<TheApplication> icons = new ArrayList<TheApplication>();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Intent startupIntent = new Intent(Intent.ACTION_MAIN);
startupIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PackageManager pm = getActivity().getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(startupIntent, 0);
Log.i(TAG, "I've found " + activities.size() + " activities.");
Collections.sort(activities, new Comparator<ResolveInfo>()
{
public int compare(ResolveInfo a, ResolveInfo b)
{
PackageManager pm = getActivity().getPackageManager();
return String.CASE_INSENSITIVE_ORDER.compare(a.loadLabel(pm).toString(), b.loadLabel(pm).toString());
}
});
for(int i = 0; i < activities.size(); i++)
{
icons.add(new TheApplication(activities.get(i).loadLabel(pm).toString(),activities.get(i).loadIcon(pm), activities.get(i)));
}
IconAdapter adapter = new IconAdapter(icons);
setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id)
{
TheApplication app = (TheApplication) getListAdapter().getItem(position);
ResolveInfo resolveInfo = app.getResolveInfo();
ActivityInfo activityInfo = resolveInfo.activityInfo; // exception was thrown from this line
if(activityInfo == null) return;
Intent i = new Intent();
i.setClassName(activityInfo.applicationInfo.packageName, activityInfo.name);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
private class IconAdapter extends ArrayAdapter<TheApplication>
{
public IconAdapter(ArrayList<TheApplication> icons)
{
super(getActivity(), android.R.layout.simple_list_item_1, icons);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
// if we weren't given a view, inflate one
if (null == convertView) {
convertView = getActivity().getLayoutInflater()
.inflate(R.layout.list_item_app, null);
}
// configure the view for this Crime
TheApplication theApp = getItem(position);
TextView theTextView = (TextView)convertView.findViewById(R.id.text);
theTextView.setText(theApp.getName());
ImageView img = (ImageView) convertView.findViewById(R.id.icon);
img.setImageDrawable(theApp.getIcon());
return convertView;
}
}
}
TheApplication class:
package com.example.nerdlauncher;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
public class TheApplication {
private String mName;
private Drawable mIcon;
private ResolveInfo ri;
public TheApplication(String name, Drawable icon, ResolveInfo ri)
{
mName = name;
mIcon = icon;
}
public Drawable getIcon() {
return mIcon;
}
public String getName () {
return mName;
}
public ResolveInfo getResolveInfo()
{
return ri;
}
}
Upvotes: 2
Views: 96
Reputation: 1306
make changes in constructor
public TheApplication(String name, Drawable icon, ResolveInfo ri)
{
this.mName = name;
this.mIcon = icon;
this.ri=ri;
}
Upvotes: 1