1

インストールされているすべてのアプリケーションとそのアイコンを表示しようとしています。リスト項目をクリックした後、そのアプリケーションに関連するレコードを表示しています。

アプリケーションとアイコンは正しく表示されていますが、リストアイテムをクリックすると、次のエラーが発生します。java.lang.classcastException android.content.pm.ResolveInfo

final PackageManager pm = this.getPackageManager();

    Intent intent = new Intent(Intent.ACTION_MAIN, null);
    intent.addCategory(Intent.CATEGORY_LAUNCHER);

    final ArrayList<ResolveInfo> list = (ArrayList<ResolveInfo>) pm
            .queryIntentActivities(intent,
                    PackageManager.PERMISSION_GRANTED);
    for (ResolveInfo rInfo : list) {
        Log.i("taa", ": Installed Applications "
                + rInfo.activityInfo.applicationInfo.loadLabel(pm)
                        .toString());
    }

    final ArrayAdapter<ResolveInfo> adapter = new ArrayAdapter<ResolveInfo>(
            this, R.layout.installedapp, list) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null)
                convertView = LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.installedapp, parent, false);

            final String text = list.get(position).activityInfo.applicationInfo
                    .loadLabel(pm).toString();
            ((TextView) convertView.findViewById(R.id.text)).setText(text);

            final Drawable drawable = list.get(position).activityInfo.applicationInfo
                    .loadIcon(pm);
            ((ImageView) convertView.findViewById(R.id.image))
                    .setImageDrawable(drawable);

            return convertView;
        }

    };
    setListAdapter(adapter);

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

}

protected void onListItemClick(ListView l, View v, int position, long id) {
    String item = (String) getListAdapter().getItem(position);///////---->error
    List<String> app_item = dh.getRecordItem(item);
    // Toast.makeText(this, item + " selected", Toast.LENGTH_LONG).show();
    Intent intent = new Intent(ApplicationList.this, AppContent.class);
    Bundle bundle = new Bundle();

    if (app_item.get(0).equals("No records")) {
        Log.d("Set", "No Activity happened");
        bundle.putString("list", app_item.toString());
    } else {
        Log.d("Set", "Act happened");
        bundle.putString("list", app_item.toString());
    }
    intent.putExtras(bundle);
    startActivity(intent);

}

ログにアイテムの値を出力しようとしましたが、この値resolverInfo{405437c0 com.android.camera gallaru pickerp=0 o=0 m=0x108000} を取得しましたが、カメラのみを取得したくありません。クリック時のコードが機能するようにします。このエラーを解決するために私がすべきこと。ありがとう。

4

1 に答える 1

2

実際には、ResolveInfoオブジェクトをStringオブジェクトにキャストしているため、例外が発生します。

これを試して

protected void onListItemClick(ListView l, View v, int position, long id) {
 ResolveInfo info = (ResolveInfo) getListAdapter().getItem(position);
 String item =  info.activityInfo.name;
.
.
.

そして、何が起こるか教えてください。

于 2012-04-07T06:27:32.223 に答える