代码如下,想要实现点击一个checkBox之后,弹出一个dialog,其中用listview来显示带有图标和应用信息的列表,但是运行之后会闪退,提示
listview.setAdapter(browseAppAdapter);
这行代码空指针错误,求解
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (checkBox.isChecked()) {
final Dialog dialog = new Dialog(getActivity());
dialog.setContentView(R.layout.browse_app_list);
dialog.setTitle("应用列表");
mlistAppInfo = new ArrayList<AppInfo>();
queryAppInfo(); // 查询所有应用程序信息
BrowseApplicationInfoAdapter browseAppAdapter = new BrowseApplicationInfoAdapter(
getActivity(), mlistAppInfo);
listview.setAdapter(browseAppAdapter);
listview.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
intent = mlistAppInfo.get(position).getIntent();
}
});
dialog.show();
}
}
});
listview实例化了吗?
http://blog.csdn.net/superjunjin/article/details/7675724
listview之前的代码那?
package com.example.gesture;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.example.gesture.R;
import com.example.gesture.ShakeDetector.OnShakeListener;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ListView;
import android.widget.CompoundButton.OnCheckedChangeListener;
public class MainTab01 extends Fragment {
ShakeDetector mShakeDetector1;
private CheckBox checkBox;
private ListView listview = null;
private List<AppInfo> mlistAppInfo = null;
private Intent intent;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main_tab_01, container, false);
checkBox = (CheckBox) view.findViewById(R.id.checkBox1);
listview = (ListView) view.findViewById(R.id.listviewApp);
final ShakeDetector mShakeDetector = new ShakeDetector(
this.getActivity());
OnShakeListener shake = new OnShakeListener() {
@Override
public void onShake() {
startActivity(intent);
}
};
mShakeDetector.registerOnShakeListener(shake);
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton arg0, boolean ischecked) {
// TODO Auto-generated method stub
if (ischecked) {
mShakeDetector.start();
} else {
mShakeDetector.stop();
}
}
});
checkBox.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (checkBox.isChecked()) {
createDialog();
}
}
});
return view;
}
public void createDialog() {
final Dialog dialog = new Dialog(this.getActivity());
dialog.setContentView(R.layout.browse_app_list);
dialog.setTitle("应用列表");
mlistAppInfo = new ArrayList<AppInfo>();
queryAppInfo(); // 查询所有应用程序信息
BrowseApplicationInfoAdapter browseAppAdapter = new BrowseApplicationInfoAdapter(
this.getActivity(), mlistAppInfo);
listview.setAdapter(browseAppAdapter);
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
intent = mlistAppInfo.get(position).getIntent();
}
});
dialog.show();
}
public void queryAppInfo() {
PackageManager pm = this.getActivity().getPackageManager(); // 获得PackageManager对象
Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent,
PackageManager.MATCH_DEFAULT_ONLY);
Collections.sort(resolveInfos,
new ResolveInfo.DisplayNameComparator(pm));
if (mlistAppInfo != null) {
mlistAppInfo.clear();
for (ResolveInfo reInfo : resolveInfos) {
String activityName = reInfo.activityInfo.name; // 获得该应用程序的启动Activity的name
String pkgName = reInfo.activityInfo.packageName; // 获得应用程序的包名
String appLabel = (String) reInfo.loadLabel(pm); // 获得应用程序的Label
Drawable icon = reInfo.loadIcon(pm); // 获得应用程序图标
// 为应用程序的启动Activity 准备Intent
Intent launchIntent = new Intent();
launchIntent.setComponent(new ComponentName(pkgName,
activityName));
// 创建一个AppInfo对象,并赋值
AppInfo appInfo = new AppInfo();
appInfo.setAppLabel(appLabel);
appInfo.setPkgName(pkgName);
appInfo.setAppIcon(icon);
appInfo.setIntent(launchIntent);
mlistAppInfo.add(appInfo); // 添加至列表中
System.out.println(appLabel + " activityName---" + activityName
+ " pkgName---" + pkgName);
}
}
}
}
不好意思,解决了,确实是空指针的问题