我的列表視圖包含了安裝所有應用..當我在一個點擊我要打開一個新的活動,但實際上我得到一個錯誤。這是代碼:不能轉換爲android.content.pm.PackageInfo上點擊我的列表視圖
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long row) {
PackageInfo packageInfo = (PackageInfo) parent.getItemAtPosition(position);
AppDataActivity appData = (AppDataActivity) getApplicationContext();
appData.setPackageInfo(packageInfo);
Toast.makeText(MainActivity.this, position, Toast.LENGTH_LONG).show();
Intent appInfo = new Intent(MainActivity.this, ApkInfoActivity.class); startActivity(appInfo);
}
,這是日誌:
10-30 14:37:56.780: E/AndroidRuntime(20993): FATAL EXCEPTION: main
10-30 14:37:56.780: E/AndroidRuntime(20993): java.lang.ClassCastException: android.content.pm.ApplicationInfo cannot be cast to android.content.pm.PackageInfo
10-30 14:37:56.780: E/AndroidRuntime(20993): at com.dd.application.MainActivity.onItemClick(MainActivity.java:370)
10-30 14:37:56.780: E/AndroidRuntime(20993): at android.widget.AdapterView.performItemClick(AdapterView.java:297)
10-30 14:37:56.780: E/AndroidRuntime(20993): at android.widget.AbsListView.performItemClick(AbsListView.java:1149)
10-30 14:37:56.780: E/AndroidRuntime(20993): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2939)
10-30 14:37:56.780: E/AndroidRuntime(20993): at android.widget.AbsListView$2.run(AbsListView.java:3622)
10-30 14:37:56.780: E/AndroidRuntime(20993): at android.os.Handler.handleCallback(Handler.java:730)
10-30 14:37:56.780: E/AndroidRuntime(20993): at android.os.Handler.dispatchMessage(Handler.java:92)
10-30 14:37:56.780: E/AndroidRuntime(20993): at android.os.Looper.loop(Looper.java:137)
10-30 14:37:56.780: E/AndroidRuntime(20993): at android.app.ActivityThread.main(ActivityThread.java:5323)
10-30 14:37:56.780: E/AndroidRuntime(20993): at java.lang.reflect.Method.invokeNative(Native Method)
10-30 14:37:56.780: E/AndroidRuntime(20993): at java.lang.reflect.Method.invoke(Method.java:525)
10-30 14:37:56.780: E/AndroidRuntime(20993): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:743)
10-30 14:37:56.780: E/AndroidRuntime(20993): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:559)
10-30 14:37:56.780: E/AndroidRuntime(20993): at dalvik.system.NativeStart.main(Native Method)
如果必要的話我已經實現了OnItemClickListener
在我的MainActivity。我無法找到問題,但如果能幫助我可以用點擊以這種方式使用ApplicationInfo:
@Override
public void onItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
final ApplicationInfo app = applist.get(position);...
...
...
但如果我用PackageInfo
我不能這樣做..我該如何解決?
編輯與適配器
public class ApplicationAdapter extends ArrayAdapter<ApplicationInfo> {
private List<ApplicationInfo> appsList = null;
private Context context;
private PackageManager packageManager;
private List<ApplicationInfo> listOfApp;
public ApplicationAdapter(Context context, int textViewResourceId,
List<ApplicationInfo> appsList) {
super(context, textViewResourceId, appsList);
this.context = context;
this.appsList = appsList;
this.listOfApp = new ArrayList<ApplicationInfo>(); //Added here
packageManager = context.getPackageManager();
listOfApp.addAll(appsList);
}
@Override
public int getCount() {
return ((null != appsList) ? appsList.size() : 0);
}
@Override
public ApplicationInfo getItem(int position) {
return ((null != appsList) ? appsList.get(position) : null);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (null == view) {
LayoutInflater layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = layoutInflater.inflate(R.layout.snippet_list_row, null);
}
ApplicationInfo data = appsList.get(position);
if (null != data) {
TextView appName = (TextView) view.findViewById(R.id.app_name);
TextView packageName = (TextView) view.findViewById(R.id.app_paackage);
ImageView iconview = (ImageView) view.findViewById(R.id.app_icon);
appName.setText(data.loadLabel(packageManager));
packageName.setText(data.packageName);
iconview.setImageDrawable(data.loadIcon(packageManager));
}
return view;
}
// Filter Class
public void filter(String charText) {
charText = charText.toLowerCase(Locale.getDefault());
appsList.clear();
if (charText.length() == 0) {
appsList.addAll(listOfApp);
}
else
{
for (ApplicationInfo ai : listOfApp)
{
if (ai.loadLabel(packageManager).toString().toLowerCase(Locale.getDefault()).contains(charText))
{
appsList.add(ai);
}
}
}
notifyDataSetChanged();
}
}
AppData的: 公共類AppDataActivity擴展應用{
PackageInfo packageInfo;
public PackageInfo getPackageInfo() {
return packageInfo;
}
public void setPackageInfo(PackageInfo packageInfo) {
this.packageInfo = packageInfo;
}
}
你可以張貼適配器? – Blackbelt
edited ..你是指我在編輯中發佈的內容嗎? –