Fragment 内のビューにアダプターを割り当てる際の Null ポインター。
フラグメントを含むアクティビティがあります。Fragment に GridView を設定したいと考えています。そのために、カスタムアダプターを作成しました-
public class MyBaseAdapter extends BaseAdapter {
private Context mContext;
private List<ResolveInfo> mAppList;
MyBaseAdapter(Context c, List<ResolveInfo> l) {
mContext = c;
mAppList = l;
}
public int getCount() {
return mAppList.size();
}
public Object getItem(int position) {
return mAppList.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
// if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(200, 200));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(8, 8, 8, 8);
} else {
imageView = (ImageView) convertView;
}
ResolveInfo resolveInfo = mAppList.get(position);
imageView.setImageDrawable(resolveInfo
.loadIcon(mPackageManager));
return imageView;
}
}
フラグメントを次のように実装しました-
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.grid_of_app, container, false);
HashMap<String, String> pkClsPair = new HashMap<String, String>();
pkClsPair.put("com.android.contacts", "com.android.contacts.activities.PeopleActivity");
pkClsPair.put("com.android.gallery", "com.android.camera.GalleryPicker");
mPackageManager = getActivity().getPackageManager();
List<ResolveInfo> intentList = null, intentList_temp = null;
Intent intent = new Intent(Intent.ACTION_MAIN, null);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
for (Map.Entry<String, String> entry : pkClsPair.entrySet()) {
intent.setClassName(entry.getKey(), entry.getValue());
if (intentList == null)
intentList = getActivity().getPackageManager().queryIntentActivities(intent, 0);
else {
intentList_temp = (getActivity().getPackageManager().queryIntentActivities(intent, 0));
intentList.addAll(intentList_temp);
}
}
mBaseAdapter = new MyBaseAdapter(getActivity(), intentList);
GridView mGridview = (GridView) getActivity().findViewById(R.id.gridView);
mGridview.setAdapter(mBaseAdapter);
mGridview.setOnItemClickListener(mOnItemClickListener);
return rootView;
}
ただし、Adapter (mBaseAdapter) を Gridview に割り当てているときに NullPointer Exception が発生するようです。アダプターに適切なコンテキストを提供しているため、機能するはずです(デバッグ中にもチェックしましたが、値はnullではありません)。
前もって感謝します。