Botões um ao lado do outro

45 respostas
F

Meus amigos, preciso montar um layout ocupando a tela toda, parecido com esse modelo:

Button1 Button2 Button3 …
Buttonx …

Gostaria de fazer com que os botões coubessem na tela qtos fossem possível nessa modelo, um ao lado do outro e ao acabar a linha recomeçar embaixo do de cima e assim por diante.

45 Respostas

V

Boa tarde!

Então, olhe com carinho para a construção de uma GridView, acho que pode ajudar bastante!

http://developer.android.com/guide/topics/ui/layout/gridview.html

O site do próprio Android sempre deve ser sua grande aliada! :smiley:

F

Obrigado pelo retorno. Estou usando o AbsoluteLayout, pode ser esse também?

V

Cara, sinceramente, NÃO faça isso!

O AbsoluteLayout já está depreciado pelo Android, e isso é péssimo! Utilize recursos mais atuais e avançados para sua programação.
Acredite, implementar GridView não é tão difícil quanto parece…

F

Como ficaria um layout com os botões usando GridView? Nunca utilizei isso. Poderia postar aqui um exemplo com alguns botões?

F

Cara, é o exemplo do link que vc passou pra mim, só que com botões. Como faço isso?

V

Então, olhe para o exemplo do link, o que você necessita mudar é a sua classe BaseAdapter, pois o GridView está sendo preenchido com diversos ImageView's, e no seu caso deve ser Button's.

Então, adapte o método getView para te responder como desejar. Exemplo:

public class ButtonAdapter extends BaseAdapter {

  // Demais códigos...

  public View getView(int position, View convertView, ViewGroup parent) {
    Button button;
    if (convertView == null) {
      button = new Button(context);
      // Modifique aqui o Button como desejar, inclusive colocando o seu OnClickListener...
    } else {
      button = (Button) convertView;
    }
    return button;
  }

}
F

Meu amigo, obrigado mesmo, mas poderia ja fazer com pelo menos dois botões para eu ver como é? Nunca usei esse cara, rs. To meio que viajando. Tem como me passar um exemplo com dois botões, ou um só.

V

Bom, pegue este mesmo código que te passei acrescente o seguinte:

Abaixo da linha:

Lembrando que você pode pegar a mesma estrutura dos demais códigos da classe ImageAdapter que está no link, apenas não precisa da array mThumbIds, que fica em baixo.
E no método getCount, coloque quantos botões você quer ter na GridView. Exemplo:

public int getCount() { return 5; }

Então, no método onCreate da sua Activity, coloque a mesma estrutura do link, apenas mude:

Para:

Isso já deve ajudar…

F

oK, e como que coloco nome nos botões? Exemplo: Cadastro Cliente, Cadastro N

V

Crie uma array com todos os nomes de seus botões. Exemplo:

E indique o nome no setText de cada Button, baseado na posição da array, substituindo a linha:

Por esta:

F

Ok, obrigado, vou mudar de AbsoluteLayout para GridView. Poderia me ajudar numa outra coisa, aproveitando a deixa?

F

Tenho a seguinte Classe DbAdapter. Poderia dar uma analisada para ver se está correto? Ainda falta algumas tabelas.

package br.me.aqua.banco;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;

public class DbAdapter {
	
	private static final String DATABASE_NAME = "bancoaqua";
	private static final int DATABASE_VERSION = 1;
	
	private static final String DATABASE_TABLE_CLIENTES = "clientes";
	private static final String DATABASE_TABLE_CARROS = "carros";
	private static final String DATABASE_TABLE_TIPO_CARRO = "tipo_carro";
	private static final String DATABASE_TABLE_SERVICOS = "servicos";
	private static final String DATABASE_TABLE_HORARIOS = "horarios";
	private static final String DATABASE_TABLE_OS = "os";
	
//  CAMPOS DA TABELA CLIENTES	
	public static final String KEY_IDCLI = "_id";
	public static final String KEY_NOME = "nome";
	public static final String KEY_ENDERECO = "endereco";
	public static final String KEY_TELEFONE = "telefone";
	public static final String KEY_CELULAR = "celular";
	public static final String KEY_EMAIL = "email";

//  CAMPOS DA TABELA CARROS	
	public static final String KEY_IDCARRO = "_id";
	public static final String KEY_IDCLIENTE_CARRO = "id_cliente";
	public static final String KEY_IDTIPO_CARRO = "id_tipo";
	public static final String KEY_MODELO = "modelo";
	public static final String KEY_PLACA = "placa";

//  CAMPOS DA TABELA TIPO_CARRO	
	public static final String KEY_IDTIP = "_id";
	public static final String KEY_TIPDESC = "tip_desc";
	
//  CAMPOS DA TABELA SERVICOS	
	public static final String KEY_IDSER = "_id";
	public static final String KEY_IDTIPO_SER = "id_tipo";
	public static final String KEY_DESCRICAO_SER = "descricao";
	public static final String KEY_VALOR = "valor";
	
//  CAMPOS DA TABELA HORARIOS	
	public static final String KEY_IDHOR = "_id";
	public static final String KEY_HORARIO = "horario";
	
//  CAMPOS DA TABELA OS	
	public static final String KEY_IDCARRO_OS = "_id";
	public static final String KEY_IDCLIENTE_OS = "id_cliente";
	public static final String KEY_IDSERVICO = "id_servico";
	public static final String KEY_IDHORARIO = "id_horario";
	public static final String KEY_DATA = "data";
	
	
//  CRIA A TABELA CLIENTES
	private static final String DATABASE_CREATE_CLIENTES = "create table " + DATABASE_TABLE_CLIENTES + " ("
	+ KEY_IDCLI + " integer primary key autoincrement, "
	+ KEY_NOME + " text, "
	+ KEY_ENDERECO + " text, "
	+ KEY_TELEFONE + " text, "
	+ KEY_CELULAR + " text, "
	+ KEY_EMAIL + " text);";
	
//  CRIA A TABELA CARROS
	private static final String DATABASE_CREATE_CARROS = "create table " + DATABASE_TABLE_CARROS + " ("
	+ KEY_IDCARRO + " integer primary key autoincrement, "
	+ KEY_IDCLIENTE_CARRO + " integer, "
	+ KEY_IDTIPO_CARRO + " integer, "
	+ KEY_MODELO + " text, "
	+ KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_CARRO
	+ " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_IDCLI
	+ " ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( " 
	+ KEY_IDTIPO_CARRO + " ) REFERENCES " + DATABASE_TABLE_TIPO_CARRO + " (" 
	+ KEY_IDTIPO_CARRO + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";

	
//  CRIA A TABELA TIPO_CARRO
	private static final String DATABASE_CREATE_TIPO_CARRO = "create table " + DATABASE_TABLE_TIPO_CARRO + " ("
	+ KEY_IDTIP + " integer primary key autoincrement, "
	+ KEY_TIPDESC + " text;";

//  CRIA A TABELA SERVICOS
	private static final String DATABASE_CREATE_SERVICOS = "create table " + DATABASE_TABLE_SERVICOS + " ("
	+ KEY_IDSER + " integer primary key autoincrement, "
	+ KEY_IDTIPO_SER + " integer, "
	+ KEY_DESCRICAO_SER + " text, "
	+ KEY_VALOR + " text, FOREIGN KEY ( " + KEY_IDTIPO_SER
	+ " ) REFERENCES " + DATABASE_TABLE_TIPO_CARRO + " (" + KEY_IDTIPO_SER
	+ " ) ON DELETE RESTRICT ON UPDATE CASCADE);";
	
//  CRIA A TABELA HORARIOS
	private static final String DATABASE_CREATE_HORARIOS = "create table " + DATABASE_TABLE_HORARIOS + " ("
	+ KEY_IDHOR + " integer primary key autoincrement, "
	+ KEY_HORARIO + " text);";

//  CRIA A TABELA OS
	private static final String DATABASE_CREATE_OS = "create table " + DATABASE_TABLE_OS + " ("
	+ KEY_IDCARRO_OS + " integer primary key autoincrement, "
	+ KEY_IDCLIENTE_OS + " integer, "
	+ KEY_MODELO + " text, "
	+ KEY_PLACA + " text, FOREIGN KEY ( " + KEY_IDCLIENTE_OS
	+ " ) REFERENCES " + DATABASE_TABLE_CLIENTES + " (" + KEY_IDCLI
	+ " ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( " 
	+ KEY_IDSERVICO + " ) REFERENCES " 
	+ DATABASE_TABLE_SERVICOS + " (" + KEY_IDSERVICO
	+ " ) ON DELETE RESTRICT ON UPDATE CASCADE), FOREIGN KEY ( " 
	+ KEY_IDHORARIO + " ) REFERENCES " + DATABASE_TABLE_HORARIOS + " (" 
	+ KEY_IDHORARIO + " ) ON DELETE RESTRICT ON UPDATE CASCADE);";
	
	
	private final Context mCtx;
	
	private DatabaseHelper mDbHelper;
	private SQLiteDatabase mDb;
	
	public DbAdapter(Context ctx){
		this.mCtx = ctx;
	}
	
	public DbAdapter open() throws SQLiteException{
		if(isClosed()){
			mDbHelper = new DatabaseHelper(mCtx);
			mDb = mDbHelper.getWritableDatabase();
		}
		return this;
	}
	
	public void close(){
		mDbHelper.close();
	}
	
	public boolean isClosed(){
		return mDb == null || !mDb.isOpen();
	}
	
// TABELA CLIENTES
	
//  GRAVAR CLIENTE
	public long gravarCliente(String nome, String endereco, String telefone, String celular, String email){
		ContentValues valores = new ContentValues();
		valores.put(KEY_NOME, nome);
		valores.put(KEY_ENDERECO, endereco);
		valores.put(KEY_TELEFONE, telefone);
		valores.put(KEY_CELULAR, celular);
		valores.put(KEY_EMAIL, email);
		return mDb.insert(DATABASE_TABLE_CLIENTES, null, valores);
	}

//  ALTERAR CLIENTE
	public boolean atualizarCliente(long Id, String nome, String endereco, String telefone, String celular, String email){
		ContentValues valores = new ContentValues();
		valores.put(KEY_NOME, nome);
		valores.put(KEY_ENDERECO, endereco);
		valores.put(KEY_TELEFONE, telefone);
		valores.put(KEY_CELULAR, celular);
		valores.put(KEY_EMAIL, email);
		return mDb.update(DATABASE_TABLE_CLIENTES, valores, KEY_IDCLI + "=" + Id, null) > 0;
	}

//  APAGAR CLIENTE
	public boolean apagarCliente(long Id){
		int qt = mDb.delete(DATABASE_TABLE_CLIENTES, KEY_IDCLI + "=" + Id, null);
		return qt > 0;
	}

// TABELA TIPO CARRO
	
//  GRAVAR TIPO CARRO
	public long gravarTipoCarro(String tipo){
		ContentValues valores = new ContentValues();
		valores.put(KEY_TIPDESC, tipo);
		return mDb.insert(DATABASE_TABLE_TIPO_CARRO, null, valores);
	}

//  ALTERAR TIPO CARRO
	public boolean atualizarTipoCarro(long Id, String tipo){
		ContentValues valores = new ContentValues();
		valores.put(KEY_TIPDESC, tipo);
		return mDb.update(DATABASE_TABLE_TIPO_CARRO, valores, KEY_IDTIP + "=" + Id, null) > 0;
	}

//  APAGAR TIPO CARRO
	public boolean apagarTipoCarro(long Id){
		int qt = mDb.delete(DATABASE_TABLE_TIPO_CARRO, KEY_IDTIP + "=" + Id, null);
		return qt > 0;
	}
	
	
// TABELA CARROS
	
// GRAVAR CARRO
	public long gravarCarroCliente(String modelo, String placa, String idcliente, String idtipo){
		ContentValues valores = new ContentValues();
		valores.put(KEY_IDCLIENTE_CARRO, Integer.valueOf(idcliente.trim()));
		valores.put(KEY_IDTIPO_CARRO, Integer.valueOf(idtipo.trim()));
		valores.put(KEY_MODELO, modelo);
		valores.put(KEY_PLACA, placa);
		return mDb.insert(DATABASE_TABLE_CARROS, null, valores);
	}

//  ALTERAR CARRO
	public boolean atualizarCarro(long Id, String modelo, String placa, String idcliente, String idtipo){
		ContentValues valores = new ContentValues();
		valores.put(KEY_IDCLIENTE_CARRO, Integer.valueOf(idcliente.trim()));
		valores.put(KEY_IDTIPO_CARRO, Integer.valueOf(idtipo.trim()));
		valores.put(KEY_MODELO, modelo);
		valores.put(KEY_PLACA, placa);
		return mDb.update(DATABASE_TABLE_CARROS, valores, KEY_IDCLI + "=" + Id, null) > 0;
	}

//  APAGAR CARRO
	public boolean apagarCarro(long Id){
		int qt = mDb.delete(DATABASE_TABLE_CARROS, KEY_IDCLI + "=" + Id, null);
		return qt > 0;
	}

// CONSULTAS	
	
//  TODOS OS CLIENTES	
	public Cursor getTodosClientes(){
		return mDb.query(DATABASE_TABLE_CLIENTES, null, null, null, null, null, null);
	}
	
// CLIENTE POR ID	
	public Cursor getCliente(long Id){
		return mDb.query(DATABASE_TABLE_CLIENTES, null, KEY_IDCLI + "=" + Id, null, null, null, null);
	}
	
// CLIENTE POR NOME	
	public Cursor getClientePorNome(String nomeString){
		String[] selectionArgs = {nomeString + "%"};  
//		return mDb.query(DATABASE_TABLE_CLIENTES, null, KEY_NOME + "=" + selectionArgs, null, null, null, null);
		return mDb.rawQuery("SELECT * FROM clientes WHERE nome like ?", selectionArgs);
	}


//  CARRO POR PLACA
	public Cursor getCarro(String modeloString){
//		return mDb.query(DATABASE_TABLE_CARROS, null, KEY_NOME + "=" + nomeString, null, null, null, null);
		String[] selectionArgs = {modeloString + "%"};  
		return mDb.rawQuery("SELECT * FROM carros WHERE placa like ?", selectionArgs);
	}

	
//  CARRO X CLIENTE POR PLACA
	public Cursor getCarroPorPlaca(String placaString){
		String[] selectionArgs = {placaString};  
//		return mDb.rawQuery("SELECT ca.placa, ca.modelo, c.nome FROM clientes c INNER JOIN carros ca ON c._id = ca.id_cliente",null);
		return mDb.rawQuery("SELECT ca.placa, ca.modelo, c._id, c.nome FROM clientes c INNER JOIN carros ca ON c._id = ca.id_cliente WHERE ca.placa = ?", selectionArgs);
	}

//  CARRO X CLIENTE POR NOME CLIENTE
	public Cursor getCarroPorCliente(String nomeString){
		String[] selectionArgs = {nomeString + "%"};  
		return mDb.rawQuery("SELECT ca.placa, ca.modelo, c._id, c.nome FROM clientes c INNER JOIN carros ca ON c._id = ca.id_cliente WHERE c.nome like ?", selectionArgs);
	}

// CARRO X CLIENTE TODOS
	public Cursor getCarrosCliente(){
		return mDb.rawQuery("SELECT ca.placa, ca.modelo, c._id, c.nome FROM clientes c INNER JOIN carros ca ON c._id = ca.id_cliente", null);
	}
	
	
	private class DatabaseHelper extends SQLiteOpenHelper{

		public DatabaseHelper(Context context) {
			super(context, DATABASE_NAME, null, DATABASE_VERSION);
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL(DATABASE_CREATE_CLIENTES);
			db.execSQL(DATABASE_CREATE_CARROS);
			db.execSQL(DATABASE_CREATE_TIPO_CARRO);
			db.execSQL(DATABASE_CREATE_SERVICOS);
			db.execSQL(DATABASE_CREATE_HORARIOS);
			db.execSQL(DATABASE_CREATE_OS);
		}

		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		}
		
	}
	
}
V

Confesso que não sou muito “chegado” em criar tabelas via código, prefiro utilizar o SQLite Expert Personal, acho que fica mais simples, pois ele cria o arquivo .db para mim e eu apenas abro através de um SQLiteOpenHelper.
Mas sua classe está certa sim, não sei se em questão de padrões de código é agradável o uso de muitas constantes (private static final), mas para mim está certo sim!

F

Como vc faz? Estou acostumado a fazer assim. Tem skype? O meu é [email removido]

V

Opa, irei te adicionar assim que possível…

Lembre-se que se suas dúvidas foram esclarecidas, coloque [RESOLVIDO] para o tópico, ok?

Até mais!

F

Ok, obrigado. Assim fica mais fácil de conversar. Como que vc faz no sqlite?

F

No caso do main.xml, usando o GridView e esse exemplo não precisa dele?

V

Precisa sim do GridView, ele que implementará a lógica do BaseAdapter para dinamizar os componentes da forma que você precisa… :slight_smile:

F

Cara, brigadão por estar online, eu to fazendo assim:

Classe Principal

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

ImageAdapter

package br.me.gridview;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

public class ImageAdapter extends BaseAdapter {

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		return null;
	}

}

main.xml

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical" >  
  
    <TextView  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:text="@string/hello" />  
  
</LinearLayout>
V

Estou te enviando a ideia do ButtonAdapter (na verdade, quase que a implementação inteira que você precisa…)

No seu main.xml, deve conter uma GridView, onde receberá o conteúdo desse Adapter, através do:

GridView gridView = (GridView) findViewById(R.id.gridView); gridView.setAdapter(new ButtonAdapter(this));

Espero que ajude…

F

Esse buttonAdapter eu copio para o projeto, certo?

Na classe Principal eu coloco isso:

GridView gridView = (GridView) findViewById(R.id.gridView);  
gridView.setAdapter(new ButtonAdapter(this));
V

Isso, você copia e precisa de todos os imports da classe, que eu não implementei (fiz esta classe rapidex num bloco de notas :P)…

E sim, este código você coloca na sua classe principal…

Agora para adaptar da sua forma é facil :]

F

Ta dando erro aqui:

package br.me.gridview;

import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;

public class ButtonAdapter extends BaseAdapter {

	  private Context context; // context ta sublinhado de vermelho
	  private static final String[] buttonNames = {"Cadastro", "Consulta", "Manutenção", "About", "Config"};

	  public ButtonAdapter(Context context) {  // context ta sublinhado de vermelho
	    this.context = context; // context ta sublinhado de vermelho
	  }

	  @Override
	  public int getCount() {
	    return 5;
	  }

	  @Override
	  public Object getItem(int pos) {
	    return null;
	  }

	  @Override
	  public long getItemId(int pos) {
	    return 0;
	  }

	  @Override
	  public View getView(int position, View convertView, ViewGroup parent) {
	    Button button;
	    if (convertView == null) {
	      button = new Button(context); // context ta sublinhado de vermelho
	      button.setText(buttonNames[position]);
	    } else {
	      button = (Button) convertView;
	    }
	    return button;
	  }

	}

Minha classe Principal ta assim:

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}
V

Importe o Context.

F

Ok, e como fica a classe principal?

V

Embaixo da linha do setContentView, coloque as duas linhas de código que eu te passei… Não esqueça de dar os imports necessários!

F

A classe Principal fica assim:

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridView gridView = (GridView) findViewById(R.id.gridView);  // o id ta sublinado de vermelho
        gridView.setAdapter(new ButtonAdapter(this));  
    }
}

Tá como ficaria o main.xml com o GridView:

Assim?

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>
V

Isso, apenas deixe a linha do android:id dessa forma:

F

Ficou assim:

Principal

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridView gridView = (GridView) findViewById(R.id.gridView);  
        gridView.setAdapter(new ButtonAdapter(this));  
    }
}

main.xml

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/gridView"      
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

Classe ButtonAdapter

package br.me.gridview;

import android.content.Context; 
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;

public class ButtonAdapter extends BaseAdapter {

	  private Context context;
	  private static final String[] buttonNames = {"Cadastro", "Consulta", "Manutenção", "About", "Config"};

	  public ButtonAdapter(Context context) {
	    this.context = context;
	  }

	  @Override
	  public int getCount() {
	    return 5;
	  }

	  @Override
	  public Object getItem(int pos) {
	    return null;
	  }

	  @Override
	  public long getItemId(int pos) {
	    return 0;
	  }

	  @Override
	  public View getView(int position, View convertView, ViewGroup parent) {
	    Button button;
	    if (convertView == null) {
	      button = new Button(context);
	      button.setText(buttonNames[position]);
	    } else {
	      button = (Button) convertView;
	    }
	    return button;
	  }

	}

Agora, como colocaria os botões com seus nomes?

Na classe principal coloco isso, onde?

private String[] buttonNames = {"Cadastro de Cliente", "Consulta de Cliente", "Manutenção", "About", "Configurações"}; 
button.setText(buttonNames[position]);
F

Como que faço os botões com seus nomes?

V

Bom, se você sabe quais são os nomes, e eles serão estáticos, ou seja, não irá crescer ou diminuir, então apenas mude a variável buttonNames do ButtonAdapter conforme você quiser… lembrando de modificar o retorno do método getCount para a quantidade de botões que você deseja.

F

Não entendi essa parte. Os botões vão ser estáticos, mas pode ser que aumente a quantidade dos mesmos.

V

Bom, então modifique a classe ButtonAdapter assim:

public class ButtonAdapter extends BaseAdapter {
  private String[] buttonNames;
  private Context context;

  public ButtonAdapter(Context context, String[] buttonNames) {
    this.context = context;
    this.buttonNames = buttonNames;
  }

  @Override
  public int getCount() {
    return buttonNames.length;
  }

  // Demais códigos...

}

Agora, na classe Principal, quando usar o Adapter, você determinará quais os nomes dos botões, automaticamente você estará determinando o tamanho da GridView.

gridView.setAdapter(new ButtonAdapter(this, new String[] {"Item 1", "Item 2", "Item 3"}));

Aí sempre que for utilizar o ButtonAdapter, você determina a sua array de Strings com o texto de todos os botões...

F

Colei essa linha no principal;

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridView gridView = (GridView) findViewById(R.id.gridView);  
        gridView.setAdapter(new ButtonAdapter(this, new String[] {"Item 1", "Item 2", "Item 3"}));   // ta sublinha de vermelho: new ButtonAdapter(this, new String[] {"Item 1", "Item 2", "Item 3"}));
    }
}
V

Você anda esquecendo do import, se é uma classe diferente, deve ser importada… se tiver usando o Eclipse, aperte CTRL + SHIFT + O para fazer o import automático…

F

Estou usando eclipse, mas qual import está faltando. Apertei CTRL+SHIF+O e não fez nada.

The constructor ButtonAdapter(GridViewActivity, String[]) is undefined

V

Da classe ButtonAdapter que você acabou de criar, importe-a.

F

Rapaz, rs, deu um branco, como é mesmo:

import…

V

import <caminho_da_classe_ButtonAdapter>.ButtonAdapter;

F

Fiz assim:

package br.me.gridview;

import android.app.Activity;
import android.os.Bundle;
import android.widget.GridView;
import br.me.gridview.ButtonAdapter; 

public class GridViewActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        GridView gridView = (GridView) findViewById(R.id.gridView);  
        gridView.setAdapter(new ButtonAdapter(this, new String[] {"Item 1", "Item 2", "Item 3"})); // ainda sublinhado new ButtonAdapter(this, new String[] {"Item 1", "Item 2", "Item 3"}) 
    }
}
F

Esse facebook é seu?

https://www.facebook.com/bruno.henriquedeoliveira.547

Posso te adicionar?

V

Claro, pode sim…

F

E esse erro ai, não sei o que é.

The constructor ButtonAdapter(GridViewActivity, String[]) is undefined

V

Troque:

Por:

F

Não está chamando a tela. Fiz um método para mostrar na tela uma mensagem mas não está chamando.

Classe Principal

package br.me.aquasystem;

import br.me.gridview.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;

public class AquaSystemActivity extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		GridView gridView = (GridView) findViewById(R.id.gridView);
		gridView.setAdapter(new ButtonAdapter(getBaseContext(), new String[] {
				"Item 1", "Item 2", "Item 3" }));
		gridView.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				switch (position) {
				case 0:
					// startActivity(new Intent(AquaSystemActivity.this, SegundaActivity.class));
					mensagemExibir("AVISO - BOTÃO TIPO VEÍCULO","Em construção, aguarde!");
					// finish();
					break;
				case 1:
					// startActivity(new Intent(GridViewActivity.this,
					// TerceiraActivity.class));
					// finish();
					break;
				case 2:
					// startActivity(new Intent(GridViewActivity.this,
					// QuartaActivity.class));
					// finish();
					break;
				case 3:
					// startActivity(new Intent(GridViewActivity.this,
					// QuintaActivity.class));
					// finish();
					break;
				case 4:
					// startActivity(new Intent(GridViewActivity.this,
					// SextaActivity.class));
					// finish();
					break;
				}
			}
		});

	}
	 public void mensagemExibir(String titulo, String texto){
	    	AlertDialog.Builder mensagem = new AlertDialog.Builder(AquaSystemActivity.this);
	    	mensagem.setTitle(titulo);
	    	mensagem.setMessage(texto);
	    	mensagem.setNeutralButton("Ok", null);
	    	mensagem.show();
	 }
}

Classe Adapter

package br.me.aquasystem;

import android.content.Context; 
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;

public class ButtonAdapter extends BaseAdapter {

	  private Context context;
	  private String[] buttonNames; 
	  
	  public ButtonAdapter(Context context, String[] buttonNames) {
	    this.context = context;
	    this.buttonNames = buttonNames;
	  }

	  @Override
	  public int getCount() {
		  return buttonNames.length;
	  }

	  @Override
	  public Object getItem(int pos) {
	    return null;
	  }

	  @Override
	  public long getItemId(int pos) {
	    return 0;
	  }

	  @Override
	  public View getView(int position, View convertView, ViewGroup parent) {
	    Button button;
	    if (convertView == null) {
	      button = new Button(context);
	      button.setText(buttonNames[position]);
	    } else {
	      button = (Button) convertView;
	    }
	    return button;
	  }

	}
Criado 1 de junho de 2013
Ultima resposta 5 de jun. de 2013
Respostas 45
Participantes 2