2017-01-02 18 views
0

私はプログレスバーを持っているカスタムリストビューを作成しました。リストビューの各項目のプログレスバー値をデータベース値から設定します

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/relativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@drawable/selektor" 
    android:paddingTop="20dp" 
    android:paddingBottom="20dp" 
    android:paddingLeft="10dp"> 


<TextView 
     android:id = "@+id/l_cat" 
     android:layout_width = "wrap_content" 
     android:layout_height = "wrap_content" 
     android:layout_weight = "1" 
     android:text = "NAME" 
     android:textAppearance="@style/TextAppearance.AppCompat.Display1" 
     android:textSize="20sp" /> 

    <ProgressBar 
     style="@style/CustomProgressBarHorizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/progressBar4" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="10dp" 
     android:layout_marginTop="5dp" /> 
</RelativeLayout> 

私はプログレスバーの最大値を設定し、ViewBinderを使用して進行状況をプログレスバーにしたいので、私はこれでした:SimpleCursorAdapterため

private class CustomViewBinder implements SimpleCursorAdapter.ViewBinder{ 
     @Override 
     public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
      if(view.getId()==R.id.progressBar4) 
      { 
       ProgressBar progress = (ProgressBar) view; 
        progress.setMax(cursor.getColumnIndex("MAX")); 
        progress.setProgress(cursor.getColumnIndex("PROGRESS")); 
       return true; 
      } 

      return false; 
     } 

    } 

とコードを:

String[] from = new String[] {category.KEY_NAME}; 
int[] to = new int[] {R.id.l_category}; 


adapter = new SimpleCursorAdapter(this,R.layout.customListView,cursor,from,to,0); 
adapter.setViewBinder(new CustomViewBinder()); 
listCategories.setAdapter(adapter); 

このコードの何が問題になっています?プログレスバーの値は設定されません。

+0

一つだけが 'TextView'がアダプタ – pskink

答えて

0

のように/ INTを倍増するあなたのMAXを設定する場合は、データ型を取得するために変更する必要があります。それはとても簡単でしたが、これを設定するための良い練習であるかどうかはわかりません。

私が行ったことは、にプログレスバーIDを追加しました。なぜなら、ViewBinderは内部にあるint[]のビューを探しているからです。私はfrom[]の中に何を入れるのか分からなかったので、データベースからランダムな列インデックスを入れました。コードの作業

String[] from = new String[] {category.KEY_SS,category.KEY_NAME}; 
int[] to = new int[] {R.id.progressBar4,R.id.l_category}; 


adapter = new SimpleCursorAdapter(this,R.layout.customListView,cursor,from,to,0); 
adapter.setViewBinder(new CustomViewBinder()); 
listCategories.setAdapter(adapter); 

private class CustomViewBinder implements SimpleCursorAdapter.ViewBinder{ 
     @Override 
     public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
      if(view.getId()==R.id.progressBar4) 
      { 
       ProgressBar progress = (ProgressBar) view; 
        progress.setMax(cursor.getInt(cursor.getColumnIndex("MAX"))); 
        progress.setProgress(cursor.getInt(cursor.getColumnIndex("PROGRESS"))); 
       return true; 
      } 

      return false; 
     } 

    } 

は助けありがとうございました。

0

あなたはカーソルから値を得ていません! getString()を使用してインデックスの値を取得します。私はミスをしていたところ私が見つけたgetIntegarまたはgetDouble

progress.setMax(Integer.parseInt(cursor.getString(cursor.getColumnIndex("MAX")))); 
progress.setProgress(Integer.parseInt(cursor.getString(cursor.getColumnIndex("PROGRESS")))); 
+1

によってマッピングされている私はちょうど'カーソル#getInt' –

+0

が応答なし –

+0

を更新していないと思いますので、 'from'と' to'アレイは一つだけの要素を持っていますいいえ、データベース列のデータ型がstringに設定されている場合、Cursor#getIntは機能しません。それはこの方法でなければなりません。Cursor#getType = columnType – pskink

関連する問題