2013-10-30 35 views
0

我的列表視圖包含了安裝所有應用..當我在一個點擊我要打開一個新的活動,但實際上我得到一個錯誤。這是代碼:不能轉換爲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; 
    } 
} 
+0

你可以張貼適配器? – Blackbelt

+0

edited ..你是指我在編輯中發佈的內容嗎? –

回答

0

您適配器與ApplicationInfo一個集合填滿,所以正確的投是ApplicationInfo

變化

PackageInfo packageInfo = (PackageInfo) parent.getItemAtPosition(position); 

ApplicationInfo packageInfo = (ApplicationInfo) parent.getItemAtPosition(position); 
+0

是的,但等待..我的其他活動發生的PackageInfo再看看我的新的編輯 –

+0

您的編輯(最後一個)是不相關的ClassCastException異常 – Blackbelt

+0

逸岸,如果我用你的建議我在這裏得到一個錯誤:'應用程序數據。 setPackageInfo(packageInfo);''中setPackageInfo' –

相關問題