>
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?
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;
}
}
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.