0

わかりました。SD カードから画像を取得してアクティビティに表示しようとしていますListView

たくさんのヒントを読んでいますが、重要なチャンクがありません。これを説明する短いソースコードを見てみたいのですが、まだ何も見つかりません。

私の調査によると、が実行さbindview()れたときに呼び出されるように聞こえます。listview.setadapter(SimpleCursorAdapter adapter)ドキュメントには、が を処理できない場合にsetImageView呼び出されると記載されています。bindviewViewBinderImageView

FROM配列内のフィールド、配列内のid、およびビュー グループを で指定します。次に、アダプターをに設定すると出来上がりです。TextViewTOCursorTextViewListView

呼び出しシーケンスは次のとおりだと思います。 listView.setAdapter(SimpleCursorAdapter adapter)->adapter.bindView()->adapter.setTextView

Bindview は、ビューがTextView, determine that it can bind it, passes theTextView型であるかどうかを判断する必要がありますand text value from the cursor andsetTextView` がその役割を果たします。

ImageViewそれで、それは非常によく似たものを求めますよね?

listViw.setAdapter(SimpleCursorAdapter adapter)->adapter.bindView()->adapter.setImageView

bindViewでは、 type のオブジェクトに出くわしたときImageView、それは何をするのでしょうか? のようなデフォルトの実装はありますsetTextViewか? それを行うのは難しいと思いますが、イメージは非常に異なります。テキストはテキストですが、画像にはフォーマット、サイズ、深度、スケール、LOCATIONS などがあります。IS に渡される文字列がsetTextViewテキスト、ペイロードです。画像では、文字列は(おそらく)ファイル名であり、画像の開始点にすぎません。

にファイル名を保持するデータベース列名を使用してアダプターを構築する必要があると思いますFROM。配列には、私のレイアウトのTOid だけが含まれます。デフォルトのviewbinder bindview()ImageViewを使用できると思いますが、予想される文字列(ファイル名)を取得するためにオーバーライドし、予想されるアプリケーションパスでその画像名を見つけるために画像読み込み行を構築する必要があります。setImageView()

したがって、次のようになります(おそらく):

listView.setAdapter(MyOwnSimpleCursorAdapter myOwnAdapter)->myOwnAdapter.super.bindView()->myOwnAdapter.setImageView()

これは正しいと思いますか?不足しているギャップを埋めたり、機能するソース コードを提供したりできる人がいれば、大いに役立ちます。ところで、これを行うコードを書きましたが、機能しません。これは非常に単純なバグである可能性があり、実行可能な場合はこのスレッドを停止したくありません。正しい方向に少しだけ微調整する必要があると思います。

4

1 に答える 1

4

私はあなたの質問が何であるかをよく理解していません(そして、はい、失敗したコードを投稿する必要があります)ので、ここに私の答えがあります(これはのソースコードでも見ることができますSimpleCursorAdapter):

new を表示する必要があるSimpleCursorAdapter場合、メソッドが呼び出されます。このメソッドは、行の構築を 2 つのメソッドに委譲します: (これは、(設定した xml レイアウトを膨らませる) を作成し、配列からのs の配列をタグとして設定します) と(実際にデータをバインドしますによって作成されました)。ListViewViewgetView()newView()ViewViewidstobindView()ViewnewView()

bindView()次に、データをバインドするs の配列View(配列からのViews を持つs)を反復処理します。また、データを取得するためにカーソルから呼び出します(メソッドのみ、これは重要です)。次に、メソッドはアダプタに が設定されているかどうかを確認します。設定されている場合は、データを設定できます (データのバインドに成功した場合、メソッドとメソッドは呼び出されません)。idtogetStringgetStringViewBinderViewBindersetTextView()setImageView()ViewBinder

ViewBinderアダプターまたは戻り値のsetViewValueメソッドにa が設定されていない場合(失敗したことを意味します)、メソッドは(または) を処理しているタイプをチェックして確認し、またはを呼び出します。ViewBinderfalseViewBinderbindView()ViewTextViewImageViewsetViewText()setViewImage()

の実装はsetViewImage()、提供された文字列を int(例: イメージ id R.drawable.image) として解析しようとします。これが失敗した場合は、 を として解析しStringUriで使用setImageUri()ImageViewます。したがって、intlikeR.drawable.imageまたはStringlike"file://mnt/sdcard/photo100.jpg"は のデフォルトの実装で動作する必要がありSimpleCursorAdapter、そうでない場合は をオーバーライドしますsetImageView

于 2012-04-02T18:15:49.743 に答える