2

ListView各行にSimpleCursorAdapterはいくつかのTextViewsと が含まれていImageViewます。ImageViewいくつかの値に応じて各行を変更したいのですがImageView、データが入力された後にリスト内を更新する方法を最初に理解しようとしています。このコードを試しましたImageViewが、同じままです:

cursorAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
        public boolean setViewValue(View view, Cursor cursor, int columnIndex) {         
            int viewId = view.getId();         
            Log.v("ViewBinder", "columnIndex=" + columnIndex + " viewId = " + viewId);        
            if(viewId == R.id.imageloc)        
            {  
              sign2 = (ImageView) view;
              sign2.setImageResource(R.drawable.other);

              return true;          
          } 
          return false;      
          } 
        });

誰かが私を助けることができれば、私はそれを感謝します!

4

3 に答える 3

2

一部の値に応じて ImageView のみを更新する場合、それらの値が DB に格納されている場合、次のような SQL クエリを実行できます。

SELECT _id, name, CASE WHEN checked = 1 THEN 'R.drawable.check' ELSE 'R.drawable.check' END as img FROM table;

このようにすると、setViewBinder() メソッドを使用する必要がなくなります。クエリを実行してカーソルを取得し、それを SimpleCursorAdapter に割り当てて、アダプタをリスト ビューに割り当てるだけです。

Cursor c = mDbHelper.fetchData(sqlQuery);
(...)
String[] from = new String[]{"name", "img"};
int[] to = new int[]{R.id.text_view, R.id.imgageloc};
SimpleCursorAdapter _adapter = new SimpleCursorAdapter(this, R.layout.data_rows, c, from, to);
setListAdapter (_adapter);

注: R.drawable.check/R.drawable.check の整数値が必要になります: " ... THEN '" + R.drawable.check + "' ELSE ..."

それが役に立ち、必要なものであることを願っています。

于 2012-10-30T17:42:21.693 に答える
1

試す

sign2.setBackgroundResource(R.drawable.other);

に基づいて画像を設定しようとしていた非常によく似た状況で私のために働きましたif statement

于 2013-02-06T06:07:32.173 に答える
0

別のリソースをImageViewに設定しようとしている場所がわかりません。常にR.drawable.otherです。カーソルデータに基づいて画像リソースを変更します。

于 2012-02-29T22:38:47.987 に答える