Estou estudando pelo livro Android da Casa do Código e travei

Obrigado pela atenção
Estou estudando pelo livro Android da Casa do Código e travei na criação da progressBar com esse erro:

10-09 08:14:53.581: E/AndroidRuntime(301): FATAL EXCEPTION: main
10-09 08:14:53.581: E/AndroidRuntime(301): java.lang.IllegalStateException: android.widget.ProgressBar is not a view that can be bounds by this SimpleAdapter
10-09 08:14:53.581: E/AndroidRuntime(301): at android.widget.SimpleAdapter.bindView(SimpleAdapter.java:195)
10-09 08:14:53.581: E/AndroidRuntime(301): at android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:126)
10-09 08:14:53.581: E/AndroidRuntime(301): at android.widget.SimpleAdapter.getView(SimpleAdapter.java:114)
10-09 08:14:53.581: E/AndroidRuntime(301): at android.widget.AbsListView.obtainView(AbsListView.java:1315)
10-09 08:14:53.581: E/AndroidRuntime(301): at android.widget.ListView.makeAndAddView(ListView.java:1727)
10-09 08:14:53.581: E/AndroidRuntime(301): at android.widget.ListView.fillDown(ListView.java:652)
10-09 08:14:53.581: E/AndroidRuntime(301): at android.widget.ListView.fillFromTop(ListView.java:709)

Esta é a ActivityLlistViagem

package br.com.casadocodigo.boaviagem;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.SimpleAdapter.ViewBinder;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.TextView;

public class ViagemListActivity extends ListActivity implements OnItemClickListener,
														OnClickListener, ViewBinder {
	
	private List<Map<String, Object>> viagens;
	
	private AlertDialog alertDialog;
	
	private AlertDialog dialogConfirmacao;
	
	private int viagemSelecionada;
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState){
		super.onCreate(savedInstanceState);
		
		String[] de = {"imagem","destino","data","total", "barraProgresso"};
		
		int[] para = {R.id.tipoViagem, R.id.destino, R.id.data, R.id.valor, R.id.barraProgresso};
		
		SimpleAdapter adapter = new SimpleAdapter(this, listarViagens(), R.layout.lista_viagem, de, para); 
		
		setListAdapter(adapter);
		
		getListView().setOnItemClickListener(this);
		
		ListView listView = getListView();
		listView.setOnItemClickListener(this);
		
		this.alertDialog =  criarAlertDialog();
		this.dialogConfirmacao = criaDialogConfirmacao();
	}
	
	private List<Map<String, Object>> listarViagens(){
		viagens = new ArrayList<Map<String, Object>>();
		
		Map<String, Object> item = new HashMap<String, Object>();
		item.put("imagem", R.drawable.negocios);
		item.put("destino", "São Paulo");
		item.put("data", "02/02/2012 a 04/02/2012");
		item.put("total", "Gasto total R$ 314,98");
		item.put("barraProgresso", new Double[]{500.0, 450.0, 314.98});
		viagens.add(item);
		
		item = new HashMap<String, Object>();
		item.put("imagem", R.drawable.lazer);
		item.put("destino", "Maceió");
		item.put("data","14/05/2012 a 22/05/2012");
		item.put("total","Gasto total R$ 25834,67");
		item.put("barraProgresso2", new Double[]{500.0, 450.0, 314.98});
		viagens.add(item);
		
		return viagens;
		
	}
	
	public void onItemClick(AdapterView<?> parente, View view, int position, long id){
		
		this.viagemSelecionada  = position;
		alertDialog.show();
		
//		Map<String, Object> map = viagens.get(position);
//		String destino = (String) map.get("destino");
//		String mensagem = "Viagem selecionada" + destino;
//		Toast.makeText(getApplicationContext(), mensagem, Toast.LENGTH_SHORT).show();
//		startActivity(new Intent(this, GastoListActivity.class));
	}
	
	@Override
	public void onClick(DialogInterface dialog, int item){
		switch (item) {
		case 0:
			startActivity(new Intent(this, ViagemActivity.class));
			break;
		
		case 1:
			startActivity(new Intent(this, GastoActivity.class));
			break;
		
		case 2:
			startActivity(new Intent(this, GastoListActivity.class));
			break;
		
		case 3:
			dialogConfirmacao.show();
			break;
		
		case DialogInterface.BUTTON_POSITIVE:
			viagens.remove(viagemSelecionada);
			getListView().invalidateViews();
			break;
		
		case DialogInterface.BUTTON_NEGATIVE:
			dialogConfirmacao.dismiss();
			break;
			
		default:
			break;
		}
	}
	
	private AlertDialog criarAlertDialog(){
		final CharSequence[] items = {
				getString(R.string.editar),
				getString(R.string.novo_gasto),
				getString(R.string.gastos_realizados),
				getString(R.string.remover)};
		
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle(R.string.opcoes);
		builder.setItems(items, this);		
		
		return builder.create();
	}
	
	private AlertDialog criaDialogConfirmacao(){
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setMessage(R.string.confirmacao_exclusao_viagem);
		builder.setPositiveButton(getString(R.string.sim), this);
		builder.setNegativeButton(R.string.nao, this);
		
		return builder.create();
	}
	
	@Override
	public boolean setViewValue(View view, Object data, String textRepresentation){
		if(view.getId() == R.id.barraProgresso){
			Double valores[] = (Double[]) data;
			ProgressBar progressBar = (ProgressBar) view;
			progressBar.setMax(valores[0].intValue());
			progressBar.setSecondaryProgress(valores[1].intValue());
			progressBar.setProgress(valores[2].intValue());
			return true;
		}
		return false;
	}

}

Este é a lista_viagem.xml, de onde estou pegando o layout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center"
        android:orientation="vertical" >
        
        <ImageView
            android:id="@+id/tipoViagem"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginLeft="10dp"
        android:orientation="vertical" >
        
        <TextView
            android:id="@+id/destino"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        
        <TextView
            android:id="@+id/data"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        
        <TextView
            android:id="@+id/valor"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        
        <ProgressBar
            android:id="@+id/barraProgresso"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            style="@android:attr/progressBarStyleHorizontal" />
        
    </LinearLayout>
    

</LinearLayout>

Opa cara, beleza, como que tá?

Velho estou acompanhando esse livro e estou com o mesmo problema. Conseguiu resolver?

Tente criar um adapter que retorne a view correta.

Nessa solução voce irá precisar criar o bind na implementação.

Olá

Valeu pessoal, deu certo. Fiz da seguinte forma, se tiverem alguma contra-indicação será ótimo saber. ^^

Dentro do onCreate, fiz o seuinte:

@Override
				public boolean setViewValue(View view, Object data,	String textRepresentation) {
					if (view.getId() == R.id.barraProgresso) {
						Double valores[] = (Double[]) data;
						ProgressBar progressBar = (ProgressBar) view;
						progressBar.setMax(valores[0].intValue());
						progressBar.setSecondaryProgress(valores[1].intValue());
						progressBar.setProgress(valores[2].intValue());
						return true;
					}
					return false;
				}
			});

Vocês que estão estudando por esse livro, o que acham dele? Está valendo a pena?

Iae cara, como que tá?

Cara to gostando. É bem técnico mas aborda bastante teoria também. Vale a pena.

Valeu pela resposta amigo, vou fazer esse pequeno investimento :wink:

É bom, mas é mais indicado para quem já tenha um conhecimento básico do Android.

Onde eu consigo esse conhecimento básico de Android, já estou a um tempinho tentando achar um material bom sobre fundamentos de Android.

Cara não se engane, não precisa de conhecimento básico em android já que o PRÓPRIO LIVRO TE ENSINA ANDROID. O única coisa que é necessária para fazer um bom uso do livro é conhecer do básico para intermediário de java, e também conhecer Orientação a Objetos. Caso você tenha esses dois atributos, pode comprar o livro que vale a pena.

Cara não se engane, não precisa de conhecimento básico em android já que o PRÓPRIO LIVRO TE ENSINA ANDROID. O única coisa que é necessária para fazer um bom uso do livro é conhecer do básico para intermediário de java, e também conhecer Orientação a Objetos. Caso você tenha esses dois atributos, pode comprar o livro que vale a pena.[/quote]

Se você acha que umas 120 páginas (que é a parte básica, incluindo instalação, o livro tem +300 páginas) sejam suficientes para entender o Android, tudo bem. O que eu acho é que o livro vai ser mais útil para quem já tenha um certo perfil, já que não é muito detalhado.
Se você já tiver experiência em orientação a objetos, sql, design patterns, programação orientado a eventos, estrutura de dados, etc, aí tudo bem.
O livro é bom, mas, isso não significa que vai ser proveitoso para todo mundo, da mesma maneira!

Cara não se engane, não precisa de conhecimento básico em android já que o PRÓPRIO LIVRO TE ENSINA ANDROID. O única coisa que é necessária para fazer um bom uso do livro é conhecer do básico para intermediário de java, e também conhecer Orientação a Objetos. Caso você tenha esses dois atributos, pode comprar o livro que vale a pena.[/quote]

Se você acha que umas 120 páginas (que é a parte básica, incluindo instalação, o livro tem +300 páginas) sejam suficientes para entender o Android, tudo bem. O que eu acho é que o livro vai ser mais útil para quem já tenha um certo perfil, já que não é muito detalhado.
Se você já tiver experiência em orientação a objetos, sql, design patterns, programação orientado a eventos, estrutura de dados, etc, aí tudo bem.
O livro é bom, mas, isso não significa que vai ser proveitoso para todo mundo, da mesma maneira![/quote]

Então cara cobrir tudo ou quase tudo é impossível né. Mas o livro te ensina o suficiente pra depois você se virar com o google. Eu mesmo estou tendo meu primeiro contato com android por ele, e estou achando bem proveitoso, claro que as vezes fica algumas dúvidas no ar, mas nada que uma boa e velha googlada não resolva. Quanto aos itens que você mencionou concordo que o fato de eu ter conhecimento prévio deles me ajudou um pouco, mas o SQLite que é o banco que o livro aborda, faz quase tudo pra você. Então tendo uma noção bem básica de SQL ou banco de dados já resolve. Quanto ao design patterns acho meio desnecessário o conhecimento prévio, tendo em vista que os patterns que o livro aborda são os mais simples, e explica direitinho para que eles servem.

Resumindo. Ao meu ver a única coisa realmente importante para saber antes de começar a leitura, é Orientação a Objetos e java, de resto acho que não interfere tanto.

Os livros do Lecheta são bons, o do Reto Meier (inglês) e o site Android Developer.
É bom ter acesso a mais de uma fonte para não ficar restrito a uma única abordagem.
Esse da Casa do Código é bom por ter uma abordagem interessante para o desenvolvimento de um app com a implementação de várias funcionalidades.

Abraço

Estou estudando pelo livro do João Bosco da Casa do Código, tô gostando do livro, mas alguém aí sabe onde eu consigo as imagens usadas no projeto Boa Viagem?

[quote=VandersonAssis]Valeu pessoal, deu certo. Fiz da seguinte forma, se tiverem alguma contra-indicação será ótimo saber. ^^

Dentro do onCreate, fiz o seuinte:

@Override public boolean setViewValue(View view, Object data, String textRepresentation) { if (view.getId() == R.id.barraProgresso) { Double valores[] = (Double[]) data; ProgressBar progressBar = (ProgressBar) view; progressBar.setMax(valores[0].intValue()); progressBar.setSecondaryProgress(valores[1].intValue()); progressBar.setProgress(valores[2].intValue()); return true; } return false; } }); [/quote]

Cara, não entendi o que vc fez…
Vc criou o setViewValue() dentro do método onCreate()?
Pelo menos no meu Eclipse não dá pra criar um método dentro do outro.
Foi isso mesmo que vc fez?
VC poderia postar o código todo?
To com o mesmo problema, alguém pode me ajudar?

Encontrei uma solução…

Eu inclui uma sub-classe no final do código com um ViewBinder

[code] private class ViagemViewBinder implements ViewBinder {

	public boolean setViewValue(View view, Object data,
			String textRepresentation) {
		if (view.getId() == R.id.barraProgresso) {
			Double valores[] = (Double[]) data;
			ProgressBar progressBar = (ProgressBar) view;
			progressBar.setMax(valores[0].intValue());
			progressBar.setSecondaryProgress(valores[1].intValue());
			progressBar.setProgress(valores[2].intValue());
			return true;
		}
		return false;

	}
}[/code]

E dentro do método onCreate() eu inclui o seguinte:

[quote=Lorkshem]Encontrei uma solução…

Eu inclui uma sub-classe no final do código com um ViewBinder

[code] private class ViagemViewBinder implements ViewBinder {

	public boolean setViewValue(View view, Object data,
			String textRepresentation) {
		if (view.getId() == R.id.barraProgresso) {
			Double valores[] = (Double[]) data;
			ProgressBar progressBar = (ProgressBar) view;
			progressBar.setMax(valores[0].intValue());
			progressBar.setSecondaryProgress(valores[1].intValue());
			progressBar.setProgress(valores[2].intValue());
			return true;
		}
		return false;

	}
}[/code]

E dentro do método onCreate() eu inclui o seguinte:

Boa tarde!
Lorkshem, fiz da maneira que vocês postou acima…
Porém, recebi o seguinte erro:

03-24 13:36:11.427: E/AndroidRuntime(1444): java.lang.NullPointerException
03-24 13:36:11.427: E/AndroidRuntime(1444): at br.com.casadocodigo.boaviagem.ViagemListActivity$ViagemViewBinder.setViewValue(ViagemListActivity.java:140)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.SimpleAdapter.bindView(SimpleAdapter.java:168)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.SimpleAdapter.createViewFromResource(SimpleAdapter.java:126)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.SimpleAdapter.getView(SimpleAdapter.java:114)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.AbsListView.obtainView(AbsListView.java:2263)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.ListView.makeAndAddView(ListView.java:1790)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.ListView.fillDown(ListView.java:691)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.ListView.fillFromTop(ListView.java:752)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.ListView.layoutChildren(ListView.java:1630)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.AbsListView.onLayout(AbsListView.java:2091)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.View.layout(View.java:14817)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.ViewGroup.layout(ViewGroup.java:4631)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.View.layout(View.java:14817)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.ViewGroup.layout(ViewGroup.java:4631)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1671)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1525)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.View.layout(View.java:14817)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.ViewGroup.layout(ViewGroup.java:4631)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.View.layout(View.java:14817)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.ViewGroup.layout(ViewGroup.java:4631)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:1987)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1744)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.Choreographer.doCallbacks(Choreographer.java:574)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.Choreographer.doFrame(Choreographer.java:544)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.os.Handler.handleCallback(Handler.java:733)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.os.Handler.dispatchMessage(Handler.java:95)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.os.Looper.loop(Looper.java:136)
03-24 13:36:11.427: E/AndroidRuntime(1444): at android.app.ActivityThread.main(ActivityThread.java:5017)
03-24 13:36:11.427: E/AndroidRuntime(1444): at java.lang.reflect.Method.invokeNative(Native Method)
03-24 13:36:11.427: E/AndroidRuntime(1444): at java.lang.reflect.Method.invoke(Method.java:515)
03-24 13:36:11.427: E/AndroidRuntime(1444): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
03-24 13:36:11.427: E/AndroidRuntime(1444): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
03-24 13:36:11.427: E/AndroidRuntime(1444): at dalvik.system.NativeStart.main(Native Method)

Será que alguém pode me ajudar, por favor?!

package br.com.casadocodigo.boaviagem;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SimpleAdapter;
import android.widget.SimpleAdapter.ViewBinder;
import android.widget.TextView;
import android.widget.Toast;

public class ViagemListActivity extends ListActivity implements OnItemClickListener, OnClickListener {
	
	private List<Map<String, Object>> viagens;
	private AlertDialog alertDialog;
	private int viagemSelecionada;
	private AlertDialog dialogConfirmacao;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		String[] de = {"imagem", "destino", "data", "total", "barraProgresso"};
		int[] para = {R.id.tipoViagem, R.id.destino, R.id.data, R.id.valor, R.id.barraProgresso};
		SimpleAdapter adapter =	new SimpleAdapter(this, listarViagens(), R.layout.lista_viagem, de, para);
		setListAdapter(adapter);
		getListView().setOnItemClickListener(this);
		
		this.alertDialog = criaAlertDialog();
		
		this.alertDialog = criaAlertDialog();
		this.dialogConfirmacao = criaDialogConfirmacao();
		
		adapter.setViewBinder(new ViagemViewBinder()); 
	}
	
	private List<Map<String, Object>> listarViagens() {
		viagens = new ArrayList<Map<String,Object>>();
		
		Map<String, Object> 
		item = new HashMap<String, Object>();
		item.put("imagem", R.drawable.negocio);
		item.put("destino", "São Paulo");
		item.put("data","02/02/2012 a 04/02/2012");
		item.put("total","Gasto total R$ 314,98");
		item.put("barraProgresso", new Double[]{ 500.0, 450.0, 314.98});
		viagens.add(item);
		
		item = new HashMap<String, Object>();
		item.put("imagem", R.drawable.lazer);
		item.put("destino", "Maceió");
		item.put("data","14/05/2012 a 22/05/2012");
		item.put("total","Gasto total R$ 25834,67");
		viagens.add(item);
		
		return viagens;
	}
	
	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		//Map<String, Object> map = viagens.get(position);
		//String destino = (String) map.get("destino");
		//String mensagem = "Viagem selecionada: "+ destino;
		//Toast.makeText(this, mensagem, Toast.LENGTH_SHORT).show();
		//startActivity(new Intent(this, GastoListActivity.class));
		
		this.viagemSelecionada = position;
		alertDialog.show();
	}
	
	@Override
	public void onClick(DialogInterface dialog, int item) {
		switch (item) {
			case 0:
				startActivity(new Intent(this, ViagemActivity.class));
				break;
			case 1:
				startActivity(new Intent(this, GastoActivity.class));
				break;
			case 2:
				startActivity(new Intent(this, GastoListActivity.class));
				break;
			case 3:
				dialogConfirmacao.show();
				break;
				
				case DialogInterface.BUTTON_POSITIVE:
					viagens.remove(viagemSelecionada);
					getListView().invalidateViews();
					break;
				case DialogInterface.BUTTON_NEGATIVE:
					dialogConfirmacao.dismiss();
					break;
			}
	}
	
	
	private AlertDialog criaAlertDialog() {
		final CharSequence[] items = {
				getString(R.string.editar),
				getString(R.string.novo_gasto),
				getString(R.string.gastos_realizados),
				getString(R.string.remover) };
		
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle(R.string.opcoes);
		builder.setItems(items, this);
		
		return builder.create();
	}
	
	private AlertDialog criaDialogConfirmacao() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setMessage(R.string.confirmacao_exclusao_viagem);
		builder.setPositiveButton(getString(R.string.sim), this);
		builder.setNegativeButton(getString(R.string.nao), this);
		return builder.create();
	}
	
	
	private class ViagemViewBinder implements ViewBinder {  
		  
	    public boolean setViewValue(View view, Object data, String textRepresentation) {  
	        if (view.getId() == R.id.barraProgresso) {  
	            Double valores[] = (Double[]) data;  
	            ProgressBar progressBar = (ProgressBar) view;  
	            progressBar.setMax(valores[0].intValue());  
	            progressBar.setSecondaryProgress(valores[1].intValue());  
	            progressBar.setProgress(valores[2].intValue());  
	            return true;  
	        }  
	        return false;  
	  
	    }  
	}  
}

E aqui o xml…

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    
    <LinearLayout
		android:layout_width="wrap_content"
		android:layout_height="match_parent"
		android:gravity="center"
		android:orientation="vertical" >
		
		<ImageView
			android:id="@+id/tipoViagem"
			android:layout_width="wrap_content"
			android:layout_height="wrap_content" />
	</LinearLayout>
    
    <LinearLayout
		android:layout_width="wrap_content"
		android:layout_height="match_parent"
		android:layout_marginLeft="10dp"
		android:orientation="vertical" >
		
			<TextView
				android:id="@+id/destino"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content" />
			
			<TextView
				android:id="@+id/data"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content" />
			
			<TextView
				android:id="@+id/valor"
				android:layout_width="wrap_content"
				android:layout_height="wrap_content" />
			
			<ProgressBar android:id="@+id/barraProgresso"
				android:layout_width="fill_parent"
				android:layout_height="wrap_content"
				style="?android:attr/progressBarStyleHorizontal"/>
			
	</LinearLayout>

</LinearLayout>

Meu caro, você introduziu mais o que , que deu certo? Não entendi =S

O livro é bom ?