アイテムがテキストアイテムであるか、それに関連付けられた画像があるかどうかに基づいて、 s またはs のListView
いずれかで を構築しています。VewBinder を使用して SimpleCursorAdapter から表示されるカスタマイジング リストを使用しましたが、ある程度まではうまくいきました。TextView
ImageView
SQLite database
すべてにタイトル (テキスト) があるアイテムを含んでいますが、すべてのアイテムがリソースとして画像/ビデオを持っているわけではありません。そのため、純粋なテキスト アイテムもあれば、画像や動画のアイテムもあります。画像と動画についてはリソースを読み込みたいのですが、アイテムがプレーンテキストのアイテムの場合は、画像のタイトルを表示したいだけです。
つまり、テキスト アイテムのタイトルを表示するXML
要素と、リソース ファイルを表示する要素です (動画の場合、動画 ID の YouTube の既定の画像を取得します)。TextView
ImageView
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="6dp"
android:background="@android:color/black"
>
<TextView
android:id="@+id/tv_details_title"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_gravity="center"
android:text="TextView"
android:textColor="@android:color/white"
android:visibility="visible"
android:background="@android:color/holo_blue_bright" />
<ImageView
android:id="@+id/iv_details_resource"
android:layout_width="200dp"
android:layout_height="200dp"
android:adjustViewBounds="true"
android:scaleType="centerInside"
android:layout_gravity="center"
android:src="@drawable/logo"
android:visibility="visible"
android:background="@android:color/holo_green_light" />
</LinearLayout>
Content Provider
データベースを使用するために他のアプリが必要ないため、使用していません。アイテムに関連付けられたリソースがあるかどうかに基づいて、データを にバインドSimpleCursorAdapter
するCustomViewBinder
(内部) クラスを使用し、作成しました。view
問題は、の可視性ImageView
が常に設定されてGONE
いることです。そのため、常にTextView
要素にバインドされているため、各アイテムのタイトルが表示されますが、データベースにリソースがリストされていない場合 (つまり、resource
フィールドのレコードに「null」がある場合)、ImageView
も消えます。
これが私のコードですCustomViewBinder
:
private class CustomViewBinder implements ViewBinder{
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex){
if(columnIndex == cursor.getColumnIndex(DatabaseHelper.FIELD_RESOURCE)){
Log.d("CustomViewBinder", "columnIndex = " + columnIndex);
//If the column is resource, ten we use custom view.
String resource = cursor.getString(columnIndex);
Log.d("CustomViewBinder", "resource = " + resource);
if(resource.equalsIgnoreCase("null")){
Log.d("CustomViewBinder", "Inside if resource = " + resource);
Log.d("CustomViewBinder", "Set the image view to GONE");
view.setVisibility(View.GONE);
}else{
Log.d("CustomViewBinder", "Inside else resource = " + resource);
columnIndex = cursor.getColumnIndex(DatabaseHelper.FIELD_TITLE);
Log.d("CustomViewBinder", "columnIndex = " + columnIndex);
//If the column is resource, ten we use custom view.
String title = cursor.getString(columnIndex);
Log.d("CustomViewBinder", "title = " + title);
if(!resource.equalsIgnoreCase("null")){
Log.d("CustomViewBinder", "Set the title view to GONE");
view.setVisibility(View.GONE);
}
return true;
}
return true;
}
return false;
}
そして、明確にするためにいくつかのログ:
07-26 17:05:36.343: D/CustomViewBinder(9735): columnIndex = 4
07-26 17:05:36.343: D/CustomViewBinder(9735): resource = null
07-26 17:05:36.343: D/CustomViewBinder(9735): Inside if resource = null
07-26 17:05:36.343: D/CustomViewBinder(9735): Set the image view to GONE
07-26 17:05:36.353: D/CustomViewBinder(9735): columnIndex = 4
07-26 17:05:36.353: D/CustomViewBinder(9735): resource = null
07-26 17:05:36.353: D/CustomViewBinder(9735): Inside if resource = null
07-26 17:05:36.353: D/CustomViewBinder(9735): Set the image view to GONE
07-26 17:05:36.363: D/CustomViewBinder(9735): columnIndex = 4
07-26 17:05:36.363: D/CustomViewBinder(9735): resource = null
07-26 17:05:36.363: D/CustomViewBinder(9735): Inside if resource = null
07-26 17:05:36.363: D/CustomViewBinder(9735): Set the image view to GONE
07-26 17:05:53.770: D/CustomViewBinder(9735): columnIndex = 4
07-26 17:05:53.770: D/CustomViewBinder(9735): resource = Notes_Box_2_Notebook_1_006.jpg
07-26 17:05:53.770: D/CustomViewBinder(9735): Inside else resource = Notes_Box_2_Notebook_1_006.jpg
07-26 17:05:53.770: D/CustomViewBinder(9735): columnIndex = 2
07-26 17:05:53.770: D/CustomViewBinder(9735): title = Notebook page - man and wife
07-26 17:05:53.770: D/CustomViewBinder(9735): Set the title view to GONE
07-26 17:05:54.310: D/CustomViewBinder(9735): columnIndex = 4
07-26 17:05:54.310: D/CustomViewBinder(9735): resource = null
07-26 17:05:54.310: D/CustomViewBinder(9735): Inside if resource = null
07-26 17:05:54.310: D/CustomViewBinder(9735): Set the image view to GONE
問題は、" Set the title view to GONE
" で " image view
" がまだ に設定されてGONE
いるため、画像 " Notes_Box_2_Notebook_1_006.jpg
" が表示されないことです。タイトルは表示されます。
これは、 の " view
" がではなく、常に私CustomViewBinder
の中で であるように思われるためです。ImageView
XML
TextView
view
で「別の」にアクセスするにはどうすればよいCustomViewBinder
ですか?