Preenchi ele com os valores do meu SQLite e maravilha, tudo certo.
Contudo, eu gostaria de adicionar no rodapé dessa tela um único botão para o usuário finalizar o pedido selecionado.
Adicionei o botão na codificação acima, mas ele repete o botão em cada linha do listview.
Gostaria de saber como devo proceder para realizar isso.
Zenity, isso acontece porque o layout que você está usando é um layout da linha do view, para funcionar do jeito que você espera, teria que mudar o esquema da sua tela, ao invés de um ListActivity, poderia ser um activity e criar a list como componente no Layout da Activity.
Amigo, obrigado pela resposta!
Eu até entendi o que você quis dizer, mas como sou novo no Android não estou conseguindo implementar aqui.
Dei uma vasculhada na internet e achei esse link e vi que o camarada faz o que você me falou.
Estou tentando implementar aqui, mas estou com duas dúvidas.
1 - O que eu passo no setContentView? O layout da listview??
2 - No exemplo, para ele inserir no adapter ele usa a classe AdapterListView, só que ao tentar importa-la para meu projeto não há encontro. Existe algum motivo para isso?
Amigo, cheguei na seguinte codificação, mas não obtive sucesso.
FinalizarPedido.java
public class FinalizarPedido extends Activity {
ListView listView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_pedidoproduto);
createListView();
}
@SuppressWarnings("unchecked")
public void createListView() {
List<PedidoProduto> lista = new ArrayList<PedidoProduto>();
if (getIntent().hasExtra("lista")) {
lista = (ArrayList<PedidoProduto>) getIntent().getExtras().getSerializable("lista");
}
ListaPedidoProduto lPedProd = new ListaPedidoProduto(this, lista);
listView.setAdapter(lPedProd);
}
}
ListaPedidoProduto.java
[code] public View getView(int position, View converView, ViewGroup oarent) {
final PedidoProduto pedidoProduto = (PedidoProduto) getItem(position);
Só falta agora criar um layout para o seu Activity, não dá pra usar o mesmo, tem que ser um para o seu Activity e outro para o ListView(assim pode usar quantas vezes quizer, mas não vai dar o efeito que você espera).
Então no seu Layout para o Activity coloque um listView e um button em baixo.
Só que ainda não tive sucesso.
Li linha por linha do tutorial do camarada e fiz aqui, criei um xml para a tela principal e um para os itens.
E fiz a codificação da seguinte forma:
FinalizarPedido
[code]public class FinalizarPedido extends Activity {
private ListView listView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.finalizar_produto);
createListView();
listView = (ListView) findViewById(R.layout.listview_pedidoproduto);
createListView();
}
@SuppressWarnings("unchecked")
public void createListView() {
List<PedidoProduto> lista = new ArrayList<PedidoProduto>();
if (getIntent().hasExtra("lista")) {
lista = (ArrayList<PedidoProduto>) getIntent().getExtras().getSerializable("lista");
}
ListaPedidoProduto lPedProd = new ListaPedidoProduto(this, lista);
listView.setAdapter(lPedProd);
}
Mas ao tentar rodar tenho o seguinte retorno no logcat:
[quote]11-10 00:23:40.725: D/AbsListView(7382): Get MotionRecognitionManager
11-10 00:23:40.725: D/AndroidRuntime(7382): Shutting down VM
11-10 00:23:40.725: W/dalvikvm(7382): threadid=1: thread exiting with uncaught exception (group=0x40c4f1f8)
11-10 00:23:40.735: E/AndroidRuntime(7382): FATAL EXCEPTION: main
11-10 00:23:40.735: E/AndroidRuntime(7382): java.lang.RuntimeException: Unable to start activity ComponentInfo{br.com.unip.menudroid/br.com.unip.menudroid.FinalizarPedido}: java.lang.NullPointerException
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1970)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1995)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.app.ActivityThread.access$600(ActivityThread.java:128)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1161)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.os.Handler.dispatchMessage(Handler.java:99)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.os.Looper.loop(Looper.java:137)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.app.ActivityThread.main(ActivityThread.java:4517)
11-10 00:23:40.735: E/AndroidRuntime(7382): at java.lang.reflect.Method.invokeNative(Native Method)
11-10 00:23:40.735: E/AndroidRuntime(7382): at java.lang.reflect.Method.invoke(Method.java:511)
11-10 00:23:40.735: E/AndroidRuntime(7382): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
11-10 00:23:40.735: E/AndroidRuntime(7382): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
11-10 00:23:40.735: E/AndroidRuntime(7382): at dalvik.system.NativeStart.main(Native Method)
11-10 00:23:40.735: E/AndroidRuntime(7382): Caused by: java.lang.NullPointerException
11-10 00:23:40.735: E/AndroidRuntime(7382): at br.com.unip.menudroid.FinalizarPedido.createListView(FinalizarPedido.java:32)
11-10 00:23:40.735: E/AndroidRuntime(7382): at br.com.unip.menudroid.FinalizarPedido.onCreate(FinalizarPedido.java:17)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.app.Activity.performCreate(Activity.java:4533)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1053)
11-10 00:23:40.735: E/AndroidRuntime(7382): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1934)
11-10 00:23:40.735: E/AndroidRuntime(7382): … 11 more
11-10 00:23:40.745: D/dalvikvm(7382): GC_CONCURRENT freed 177K, 4% free 14038K/14535K, paused 2ms+2ms
11-10 00:23:40.750: E/SQLiteDatabase(7382): close() was never explicitly called on database '/data/data/br.com.unip.menudroid/databases/menuDroid’
11-10 00:23:40.750: E/SQLiteDatabase(7382): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:2063)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1117)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1074)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1161)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:869)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:228)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:157)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at br.com.unip.menudroid.database.PedidoProdutoDAO.(PedidoProdutoDAO.java:19)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at br.com.unip.menudroid.Main$3.onClick(Main.java:51)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.view.View.performClick(View.java:3644)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.view.View$PerformClick.run(View.java:14313)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.os.Handler.handleCallback(Handler.java:605)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.os.Handler.dispatchMessage(Handler.java:92)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.os.Looper.loop(Looper.java:137)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at android.app.ActivityThread.main(ActivityThread.java:4517)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at java.lang.reflect.Method.invokeNative(Native Method)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at java.lang.reflect.Method.invoke(Method.java:511)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
11-10 00:23:40.750: E/SQLiteDatabase(7382): at dalvik.system.NativeStart.main(Native Method)
11-10 00:23:40.750: E/System(7382): Uncaught exception thrown by finalizer
11-10 00:23:40.750: E/System(7382): java.lang.IllegalStateException: Don’t have database lock!
11-10 00:23:40.750: E/System(7382): at android.database.sqlite.SQLiteDatabase.verifyLockOwner(SQLiteDatabase.java:2221)
11-10 00:23:40.750: E/System(7382): at android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2313)
11-10 00:23:40.750: E/System(7382): at android.database.sqlite.SQLiteDatabase$1.entryRemoved(SQLiteDatabase.java:2309)
11-10 00:23:40.750: E/System(7382): at android.util.LruCache.trimToSize(LruCache.java:197)
11-10 00:23:40.750: E/System(7382): at android.util.LruCache.evictAll(LruCache.java:285)
11-10 00:23:40.750: E/System(7382): at android.database.sqlite.SQLiteDatabase.deallocCachedSqlStatements(SQLiteDatabase.java:2274)
11-10 00:23:40.750: E/System(7382): at android.database.sqlite.SQLiteDatabase.closeClosable(SQLiteDatabase.java:1246)
11-10 00:23:40.750: E/System(7382): at android.database.sqlite.SQLiteDatabase.finalize(SQLiteDatabase.java:2034)
11-10 00:23:40.750: E/System(7382): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:185)
11-10 00:23:40.750: E/System(7382): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:168)
11-10 00:23:40.750: E/System(7382): at java.lang.Thread.run(Thread.java:856)
[/quote]
Saberia me dizer onde estou pisando na bola? :lol:
Após pisar muito em ovos vi onde eu estava fazendo errado.
Só explicando como tem que fazer para funcionar.
1 - Você precisa criar um layout com a listview.
2 - Você precisa criar um layout da row da listview.
3 - Feito isso, você criará um arquivo para chamar a tela onde tem a listview
4 - Agora você deverá instanciar a listview passando o layout da row.
5 - Pronto, vai funcionar
O erro na minha codificação acima estava na linha
Não posso passar a tela, preciso passar o id da listview.