3

複雑なレイアウトのリストがありますR.layout.menu_rowProgressBarとテキストフィールドで構成されます。私が使用するアダプター:

   SimpleAdapter simpleAdapter = new SimpleAdapter(this, getData(path),
            R.layout.menu_row, new String[] { "title", "progress" },
            new int[] { R.id.text1,R.id.progressBar1});

アダプターはそれ自体で処理する方法を知っていますTextViewsが、そうではないProgressBarsので、複雑なデータバインダーを作成しました。

    SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(View view, Object data, String textRepresentation) {
            //here goes the code
            if () {
                return true;
            }
            return false;
        }

今、私は関数内のマッピングを埋めるのに行き詰まっています。文字列の値をprogresssetProgressメソッドに設定する必要がありProgressBarます。progressしかし、文字列と。へのハンドルがありませんProgressBar

4

1 に答える 1

8

ViewBinderが呼び出されているかどうかを確認し、ProgressBarその進行状況を設定する必要がありdataます(パラメータ(この場合は列のデータprogress)から):

SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(View view, Object data, String textRepresentation) {
            if (view.getId() == R.id.progressBar1) {
                // we are dealing with the ProgressBar so set the progress and return true(to let the adapter know you binded the data)
                // set the progress(the data parameter, I don't know what you actually store in the progress column(integer, string etc)).                             
                return true;
            }
            return false; // we are dealing with the TextView so return false and let the adapter bind the data
}

編集: 私はあなたがするあなたのaddItem方法で見ました:

temp.put("progress", name);// Why do you set again the name as progress?!?

progressここで設定する必要があるのはパラメータだと思います。

temp.put("progress", progress);

次にViewBinder

if (view.getId() == R.id.progressBar1) {
   Integer theProgress = (Integer) data;
   ((ProgressBar)view).setProgress(theProgress); 
   return true;
}
于 2012-05-01T12:26:53.627 に答える