Meus amigos,
Tenho uma lista com os dados carregados do banco. Ao clicar no nome, abre a Tela de Cadastro Clientes para Alterar ou Excluir, ok? Como fazer para chamar outra Tela no caso Cadastro Veículos para não ter fazer outra tela?
No código abaixo, chama a Tela Cadastro Clientes, para alterar ou excluir.
// Clicar em item da lista e mostra nos campos da tela de cadastro
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent intent = new Intent(Lista.this, CadastrarCliente.class);
intent.putExtra(DbAdapter.KEY_IDCLI, id);
startActivityForResult(intent, 1);
}
Tem como fazer chamar outra a Tela Cadastro Veiculo? Obrigado.
Você vai ter um botão na tela de cadastro de clientes para abrir cadastro de veículos?
Ou vai ser uma opção a mais na lista de clientes? Tipo, ele pressionar e ter a opção de ir para cadastro de clientes ou veículos.
Quero escolher a tela. Na mosca. Lembrando que é uma ListActivity. Como fazer?
Para isso você pode usar o menu de contexto. Assim, quando o usuário “clicar” no registro e segurar por um tempo, vai aparecer as opções.
Se você ver no link da documentação que lhe passei, há 3 etapas. Registrar o menu, adicionar as opções ao menu e executar as ações quando o usuário clicar no botão selecionado.
Então, to usando o método:
// Clicar em item da lista e mostra nos campos da tela de cadastro
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent intent = new Intent(Lista.this, CadastrarCliente.class);
intent.putExtra(DbAdapter.KEY_IDCLI, id);
startActivityForResult(intent, 1);
}
Tenho que criar uma pasta menu, certo? Passa de novo o link, por favor?
Então, fiz aqui esse método para deletar.
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.menu_delete:
db.open();
if(db.apagarCliente(((AdapterContextMenuInfo)item.getMenuInfo()).id))
carregarLista();
return true;
default: return super.onContextItemSelected(item);
}
Fiz assim:
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.menu_delete:
db.open();
if(db.apagarCliente(((AdapterContextMenuInfo)item.getMenuInfo()).id))
carregarLista();
return true;
//startActivity(new Intent(this,CadastrarCliente.class)); break;
case R.id.menu_carro:
startActivity(new Intent(this,CadastrarCarro.class));
return true;
// case 2:
// startActivity(new Intent(this,Lista.class)); break;
default: return super.onContextItemSelected(item);
}
}
Wagner, funcionou o que eu fiz, só que não mostrou na outra tela o id e o nome do item selecionado.
Você tem que passar os dados do carro pra tela CadastrarCarro. Pra isto, se usa um extra. Você pode passar o objeto desta maneira:
case R.id.menu_carro:
Intent intent = new Intent(this, CadastrarCarro.class);
intent.putExtra("meuObjeto", meuObjeto);
startActivity(intent);
O meuObjeto é o que vc vai mandar. Não sei se tua classe CadastrarCarro espera um id, ou um objeto carro…
Assim:
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.menu_delete:
db.open();
if(db.apagarCliente(((AdapterContextMenuInfo)item.getMenuInfo()).id))
carregarLista();
return true;
case R.id.menu_carro:
Intent intent = new Intent(Lista.this, CadastrarCarro.class);
intent.putExtra(DbAdapter.KEY_IDCLI, item.getItemId());
startActivityForResult(intent, 1);
return true;
default: return super.onContextItemSelected(item);
}
}
Na classe CadastrarCarro, ta assim:
public class CadastrarCarro extends Activity { // Início da Classe CadastrarCliente
private long mId;
private EditText Nome, Placa, Modelo;
private TextView IdNome;
private ImageButton salvar, pesquisar, limpar, voltar;
private DbAdapter mDb;
@Override
protected void onCreate(Bundle icicle){ // Início do método onCreate
super.onCreate(icicle);
setContentView(R.layout.cad_carros);
mDb = new DbAdapter(this);
mId = getIntent().getLongExtra(DbAdapter.KEY_IDCLI, 0);
Log.d("CarrosCliente", "mId: " + mId); //aqui
IdNome = (TextView) findViewById(R.id.IdNome);
Nome = (EditText) findViewById(R.id.edtNome);
Placa = (EditText) findViewById(R.id.edtPlaca);
Modelo = (EditText) findViewById(R.id.edtModelo);
mDb.open();
Cursor cliente = mDb.getCliente(mId);
if(mId > 0 && cliente.moveToFirst()){
IdNome.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_IDCLI)));
Log.d("CarrosCliente", "mId: " + mId); // e aqui
Nome.setText(cliente.getString(cliente.getColumnIndex(DbAdapter.KEY_NOME)));
}
// Código do botão Salvar da Tela de Cadastro de Clientes
salvar = (ImageButton) findViewById(R.id.btSalvar);
salvar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// int idclienteInteger = Integer.parseInt(IdNome.getText().toString());
String placaString = Placa.getText().toString();
String modeloString = Modelo.getText().toString();
String idclienteString = IdNome.getText().toString();
mDb.open();
if(Nome.getText().toString().equals("") || Placa.getText().toString().equals("")){
mensagemExibir("Erro ao Salvar","Nome OU Placa em branco, verifique!");
return;
}
mDb.gravarCarroCliente(modeloString, placaString, idclienteString);
mensagemExibir("Salvar","Veículo cadastrado com sucesso!");
mDb.close();
}
});
// Código do botão Cancelar da Tela de Cadastro de Clientes
pesquisar = (ImageButton) findViewById(R.id.btPesquisar);
pesquisar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDb.open();
if(Nome.getText().toString().equals("")){
mensagemExibir("Erro ao Pesquisar","Dados em branco, verifique!");
return;
}
String nomeString = Nome.getText().toString();
Cursor cliente = mDb.getClientePorNome(nomeString);
while(cliente.moveToNext()){
IdNome.setText(" "+cliente.getString(cliente.getColumnIndex("_id")));
Nome.setText(cliente.getString(cliente.getColumnIndex("nome")));
}
mDb.close();
}
});
limpar = (ImageButton) findViewById(R.id.btLimpar);
limpar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Nome.setText("");
}
});
// Código do botão Cancelar da Tela de Cadastro de Clientes
voltar = (ImageButton) findViewById(R.id.btVoltar);
// Início do setOnClickListener. Volta para a Tela Principal
voltar.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
setResult(RESULT_CANCELED);
// Fecha a tela
finish();
}
}); // Fim do setOnClickListener
} // Fim do método onCreate
public void mensagemExibir(String titulo, String texto){
AlertDialog.Builder mensagem = new AlertDialog.Builder(CadastrarCarro.this);
mensagem.setTitle(titulo);
mensagem.setMessage(texto);
mensagem.setNeutralButton("Ok", null);
mensagem.show();
}
} // Fim da Classe CadastrarCarro
Wagner, na classe CadastrarCarro tem esse trecho recupera o id, certo? No logCat, o mId tá vindo 0:
mId = getIntent().getLongExtra(DbAdapter.KEY_IDCLI, 0);
Log.d("CarrosCliente", "O mId é: " + mId);
Você precisa recuperar o id do objeto que colocou na lista. O id do Menu não é o id do seu objeto.
@Override
public boolean onContextItemSelected(MenuItem item) {
switch(item.getItemId()){
//...
case R.id.menu_carro:
int position = ((AdapterContextMenuInfo)item.getMenuInfo()).position;
// agora vc precisa recuperar o objeto com base na posicao
// vc busca ele no seu adapter. eh um ArrayAdapter? Um CursorAdapter?
//...
}
}
Fiz assim:
case R.id.menu_carro:
db.open();
Intent intent = new Intent(this, CadastrarCarro.class);
intent.putExtra(DbAdapter.KEY_IDCLI, ((AdapterContextMenuInfo)item.getMenuInfo()).id);
startActivity(intent);
Eu tenho uma dúvida. Quero fazer uma consulta agora por nome de cliente e mostrar os carros do mesmo. Já tenho a tela com a lista. Tem como aproveitar a tela mudando somente a sql?
Sim, você pode fazer uma consulta que retorne em outro cursor e utilizá-lo no adapter:
cursor = mDb.consultaBlaBlaBla();
adapter.changeCursor(cursor);
Ok e como fazer o listView aparecer 03 linhas, o padrão são duas ou concatenar, exemplo:
Nome + Celular +
Cursor clientes = db.getClientePorNome(nomeString);
clientes.moveToFirst();
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, clientes, new String[] {DbAdapter.KEY_NOME, DbAdapter.KEY_CELULAR}, new int[] {android.R.id.text1, android.R.id.text2});
Você pode criar o seu próprio layout para a linha. Quando você faz:
new SimpleCursorAdapter(this, android.R.layout.two_line_list_item, clientes, new String[] {DbAdapter.KEY_NOME, DbAdapter.KEY_CELULAR}, new int[] {android.R.id.text1, android.R.id.text2});
Está especificando que vai usar o layout android.R.layout.two_line_list_item. Você pode criar outro do jeito que você quiser. Abra este layout do Android no eclipse para ver como é e posteriormente crie o seu com base nele.
Dá pra fazer tres linhas usando esse exemplo? Não to conseguindo fazer… Dá pra criar mais uma linha no listview usando o android.R.layout, do jeito que está? Como fazer se caso não der?
Tenho que criar um novo xml ou posso aproveitar a lista que ja está lá? Estou usando ListActivity.
No meu xml onde está a lista tá assim:
<ListView
android:id="@+id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
Pode criar um layout padrão com alguns TextView e mostrar os campos de acordo com a consulta? Exemplo:
05 TextViews no layout e a consulta retorna 03 campos, vai dar erro se fizer assim?
Cara estou com o mesmo problema quando clico na minha View da erro. Segue meu código.
O mais estranho é que quando eu troco o código > ViagemActivity.class por LoginActivity.class funciona normalmente. o cliente é direcionado para a página. Por favor, poderiam me dar uma Luz?
Pessoal, caso seja um erro grotesto(idiota) desculpem, pois sou novo em android e estou estudando ainda.
Obrigado.
//Minha classe Index
[code]public class IndexActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_index);
}
public void selecionarOpcao(View view){
switch(view.getId()){
case R.id.nova_viagem:startActivity(new Intent(this, ViagemActivity.class));
break;
}
}
}[/code]
Meu xml(layout) da classe Index
<?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:background="#333333"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/app_name"
android:textAppearance="?android:attr/textAppearanceLarge" />
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#015488" >
<TextView
android:id="@+id/novo_gasto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginTop="80dp"
android:clickable="true"
android:drawableTop="@drawable/novo_gasto"
android:onClick="selecionarOpcao"
android:text="@string/app_mensagem_novo_gasto"
android:textColor="#FFFFFF"
android:textStyle="bold" />
<TextView
android:id="@+id/nova_viagem"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignTop="@id/novo_gasto"
android:layout_marginRight="50dp"
android:clickable="true"
android:drawableTop="@drawable/nova_viagem"
android:onClick="selecionarOpcao"
android:text="@string/app_mensagem_nova_viagem"
android:textColor="#FFFFFF"
android:textStyle="bold" />
<TextView
android:id="@+id/minhas_viagens"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/novo_gasto"
android:layout_alignParentBottom="true"
android:layout_marginBottom="120dp"
android:clickable="true"
android:drawableTop="@drawable/minhas_viagens"
android:onClick="selecionarOpcao"
android:text="@string/app_mensagem_minhas_viagens"
android:textColor="#FFFFFF"
android:textStyle="bold"/>
<TextView
android:id="@+id/configuracoes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/minhas_viagens"
android:layout_alignRight="@id/nova_viagem"
android:clickable="true"
android:drawableTop="@drawable/configuracoes"
android:onClick="selecionarOpcao"
android:text="@string/app_mensagem_configuracoes"
android:textColor="#FFFFFF"
android:textStyle="bold"/>
</RelativeLayout>
</LinearLayout>
//Minha classe Login
[code]
public class LoginActivity extends Activity {
private EditText usuario;
private EditText senha;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
usuario = (EditText)findViewById(R.id.campo_usuario);
senha = (EditText)findViewById(R.id.campo_senha);
}
public void entrarOnClick(View v) {
String retornoUsuario = usuario.getText().toString();
String retornoSenha = senha.getText().toString();
if(retornoUsuario.equals("admin") && retornoSenha.equals("admin")){
startActivity(new Intent(this,IndexActivity.class));
}else{
String msg = getString(R.string.app_erro_autenticacao);
Toast toast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);
toast.show();
}
}
}[/code]
//Meu xml do login.
[code]<?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=“vertical” >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginBottom="50dp"
android:src="@drawable/logo" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_label_usuario"
/>
<EditText
android:id="@+id/campo_usuario"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text">
<requestFocus />
</EditText>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_label_senha"
/>
<EditText
android:id="@+id/campo_senha"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:onClick="entrarOnClick"
android:text="@string/app_label_buton"
/>
</LinearLayout>[/code]
Olá pessoal sou iniciante em programação Android, e estou com uma dificuldade em CheckBoxs e nova tela(fragmento).
Resumidamente, tenho uma tela(Fragmento) [chamaremos de Tela1] com varios Checkboxs são como se fosse “categorias” de algo, e ao selecionar elas e depois clicar no botão Avançar deve abrir a Tela2 onde deve conter as “subcategorias” de cada uma das categorias selecionadas na Tela1 e tbm tem que ser em formato de Checkboxs.
Como faço pra criar estas Telas (Fragmentos) que interagem (avançando e voltando)?
E como faço para a informações (subcategorias) do meus checkboxs selecionados na Tela1 apareçam na Tela2 em formato de novos checkboxs?
P.S.: lembrando que posso selecionar de um à varios checkboxs, que são as categorias [na Tela1], e cada um delas tem de 1 à varios subcategorias que irão aparecer na segunda tela [Tela2] (somente as das categorias selecionadas) como checkboxs.