>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



Botao no adapter


Tenho um adapter que lista as vendas do banco. Preciso criar um botão de Nova venda acima dessa listagem. Porém se eu criar no layout que é chamado no adapter, o botão só aparecerá caso haja alguma venda e irá aparecer em cada item da lista. Como poderia fazer nesse caso?



6 Respostas


Olá

Se você botar o botão fora do Listview ele irá aparecer sempre.

Me mostre uma screen e código que já fez.




Na verdade eu não tenho um ListView.. Tenho um arquivo activity_venda.xml que serve de modelo para a listagem que é chamado no adapter..
http://rlsystem.com.br/forum/disco/uploads/14a1a2638b24d9b7c3c3be66cfc724d3-layout.png'/>

e aqui é o resultado de como está sendo listado..


Como não consegui fazer esse botão acima da listagem eu usei o recurso da tecla Menu do dispositivo e coloquei a 'Nova venda' como mostrando na imagem acima, mas queria que ficasse um botão sempre acima por questões de usabilidade.

Dai o meu adapter está assim:


public class AdapterVenda extends BaseAdapter {

private List listVenda;
private Context ctx;

public AdapterVenda(Context context, List listVenda){
this.listVenda = listVenda;
this.ctx = context;
}

@Override
public int getCount() {
return listVenda.size();
}

@Override
public Object getItem(int position) {
return listVenda.get(position);
}

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

@Override
public View getView(int position, View view, ViewGroup parent) {
ViewHolderHelper holder;
final VendaBean venda = listVenda.get(position);

/*
* Referencia o layout 'activity_venda.xml'
* e busca as referencias dos TextViews
*/
if(view == null){
view = LayoutInflater.from(ctx).inflate(R.layout.activity_venda, null);

holder = new ViewHolderHelper();
holder.vendaImage = (ImageView)view.findViewById(R.id.icpedidos);
holder.vendaCliente = (TextView)view.findViewById(R.id.txtClienteVenda);
holder.vendaTotalPedido = (TextView)view.findViewById(R.id.txtValorTotalPedido);
holder.vendaDataPedido = (TextView)view.findViewById(R.id.txtDataPedido);

view.setTag(holder);

}
else{
holder = (ViewHolderHelper)view.getTag();
}

/*
* Verifica se a tela está em portrait (1) ou landscape (2),
* exibe os valores nos TextViews e
* se o tamanho da razão social for maior que 30 caracteres
* será mostrado somente uma parte da razão social (caso esteja em portrait)
* caso contrário será mostrado o nome total da razão social
*/
if(getScreenOrientation() == 1){
if(venda.getCliente().getRazaoSocial().length() > 30){
holder.vendaCliente.setText(String.valueOf(venda.getCliente().getRazaoSocial()).substring(0, 30) "...");
}
else{
holder.vendaCliente.setText(String.valueOf(venda.getCliente().getRazaoSocial()));
}
}
else if(getScreenOrientation() == 2){
holder.vendaCliente.setText(String.valueOf(venda.getCliente().getRazaoSocial()));
}

holder.vendaTotalPedido.setText(FormatDoubleHelper.mascaraDinheiro(venda.getValorTotal(), FormatDoubleHelper.DINHEIRO_REAL));
holder.vendaDataPedido.setText(FormatDateHelper.formatDate(venda.getDataVenda()));

return view;
}

/*
* verifica a orientação da tela do dispositivo
* Caso retorne 1 a tela está em portrait (retrato)
* Caso retorne 2 a tela está em landscape (paisagem)
*/
public int getScreenOrientation() {
if(ctx.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
return 1;

}else if(ctx.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
return 2;
}
return 0;
}

}


E aqui está minha activity


public class VendaActivity extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

DatabaseConnection connection = new DatabaseConnection(getApplicationContext());
SQLiteDatabase vendaFacil = connection.getWritableDatabase();
VendaDao vendaDao = new VendaDao();

try {
setListAdapter(new AdapterVenda(this, vendaDao.getAll(vendaFacil)));
} catch (ParseException e) {
e.printStackTrace();
}

vendaFacil.close();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);

MenuInflater mi = getMenuInflater();
mi.inflate(R.menu.venda, menu);

return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch(item.getItemId()){
case R.id.item_novavenda:
Intent vendaActivity = new Intent(getApplicationContext(), NovaVendaActivity.class);
startActivity(vendaActivity);
}
return super.onOptionsItemSelected(item);
}

}




Ai no código do adapter ficou uma parte parecendo que está comentada mas não está, não sei pq ai apareceu comentado!




Opa

O problema é o ListActivity.

Veja se te ajuda este tópico:

http://rlsystem.com.br/forum/java/301-listactivity-com-botoes-de-comando-sem-replicar-esses-botoes#top




Nesse caso terei que criar um layout só com o botão e a ListView e outro layout com a personalização que eu desejar.. Dai no setContentView da minha activity eu referencio o layout que terá somente o botão e a ListView e no meu adapter eu vou buscar o xml de personalização.. Seria isso mesmo?




Perfeito Rodivan, exato.

E usa Activity e não ListActivity.