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…
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));
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 :]
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);
}
}
Ok, e como fica a classe principal?
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!
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"
/>
Isso, apenas deixe a linha do android:id dessa forma:
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]);
Como que faço os botões com seus nomes?
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.
Não entendi essa parte. Os botões vão ser estáticos, mas pode ser que aumente a quantidade dos mesmos.
Bom, então modifique a classe ButtonAdapter assim:
[code]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…
}[/code]
Agora, na classe Principal, quando usar o Adapter, você determinará quais os nomes dos botões, automaticamente você estará determinando o tamanho da GridView.
Aí sempre que for utilizar o ButtonAdapter, você determina a sua array de Strings com o texto de todos os botões…
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"}));
}
}
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…
Estou usando eclipse, mas qual import está faltando. Apertei CTRL+SHIF+O e não fez nada.
The constructor ButtonAdapter(GridViewActivity, String[]) is undefined
Da classe ButtonAdapter que você acabou de criar, importe-a.
Rapaz, rs, deu um branco, como é mesmo:
import…
import <caminho_da_classe_ButtonAdapter>.ButtonAdapter;