2

シンプルなアダプターを使用してリストビューに画像を配置するのに少し問題があります。オンラインサーバー(AMAZON)から画像を取得しています。ユーザーIDに基づいて画像をダウンロードした後、リストビューに設定しようとしましたが、何も表示されず、エラーも発生しませんでした。

以下は私のコードです:

// looping through All applicants
                for (int i = 0; i < applicant.length(); i++) {
                    JSONObject c = applicant.getJSONObject(i);

                    // Storing each JSON item in variable
                    String uid = c.getString(TAG_UID);
                    String name = c.getString(TAG_NAME);
                    String overall = c.getString(TAG_OVERALL);
                    String apply_datetime = c.getString(TAG_APPLY_DATETIME);
                    String photo = c.getString(TAG_PHOTO);

                    // creating new HashMap
                    //HashMap<String, String> map = new HashMap<String, String>();

                    //IMAGE
                    HashMap<String, Object> map = new HashMap<String, Object>();

                    // adding each child node to HashMap key (value)
                    map.put(TAG_UID, uid);
                    map.put(TAG_NAME, name);
                    map.put(TAG_OVERALL, overall);
                    map.put(TAG_APPLY_DATETIME, apply_datetime);

                    // adding HashList to ArrayList
                    // applicantsList.add(map);

                    // LISTING IMAGE TO LISTVIEW
                    try {
                        imageURL = c.getString(TAG_PHOTO);

                        InputStream is = (InputStream) new URL(
                                "my url link/images/"
                                        + imageURL).getContent();
                        d = Drawable.createFromStream(is, "src name");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    map.put(TAG_PHOTO, d);

                    // adding HashList to ArrayList
                    applicantsList.add(map);
                }

ご覧のとおり、画像をダウンロードした後。以下のsimpleAdapterを使用してリストビューに設定しました:

 SimpleAdapter adapter = new SimpleAdapter(
                            SignUpApplicantActivity.this, applicantsList,
                            R.layout.list_applicant, new String[] {
                                    TAG_UID, TAG_NAME, TAG_OVERALL,
                                    TAG_APPLY_DATETIME, TAG_PHOTO }, new int[] {
                                    R.id.applicantUid, R.id.applicantName,
                                    R.id.applicantOverall,
                                    R.id.apply_datetime, R.id.list_image });
                    // updating listView
                    setListAdapter(adapter);
4

3 に答える 3

1

notifyDatasetChange() を呼び出しましたか? アダプターを呼び出さないと、アダプターが無効にならない場合があります。

于 2012-11-19T09:16:50.020 に答える
1

SimpleAdapterのドキュメントから、画像データはリソース ID または文字列 (画像 URI) であると予想されます - setViewImage(ImageView,String)を参照してください。

私は2つの解決策を見ます:

  1. ドローアブルではなく、データ マップで URI を指定します。
  2. 独自のビュー バインダーを実装して、ドローアブルを ImageView にバインドします。

    adapter.setViewBinder(new SimpleAdapter.ViewBinder() {
    
        @Override
        public boolean setViewValue(View view, Object data, String textRepresentation) {
            if(view.getId() == R.id.list_image) {
                ImageView imageView = (ImageView) view;
                Drawable drawable = (Drawable) data;
                imageView.setImageDrawable(drawable);
                return true;
            }
            return false;
        }
    });
    
于 2012-11-19T09:29:35.590 に答える