When making a query it is displayed well in a ListView
normal one, but when I change the ListView
for a custom list I have some problems.
The problem is that in the query the data is in a line generated by the cursor and in the custom list the data is filled one by one.
Attached code.
Code of the class that customizes the list
package com.example.aguila0017.auxiliarcompras;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.ArrayList;
/**
* Created by Aguila0017 on 7/09/2017.
*/
public class ListaPersonalizada extends BaseAdapter {
Context context;
ArrayList lista;
String id;
String nombre;
String valor;
String cantidad;
String total;
String dia;
String mes;
String ano;
LayoutInflater inflater;
public ListaPersonalizada(Activity context, String id, String nombre, String valor, String cantidad,String total, String dia, String mes, String ano) {
this.context = context;
//this.lista = lista;
this.id = id;
this.nombre = nombre;
this.valor = valor;
this.cantidad = cantidad;
this.total = total;
this.dia = dia;
this.mes = mes;
this.ano = ano;
}
@Override
public int getCount() {
return id.length();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
public View getView(int position, View convertView, ViewGroup parent) {
// Declare Variables
TextView txt1;
TextView txt2;
TextView txt3;
TextView txt4;
TextView txt5;
TextView txt6;
TextView txt7;
TextView txt8;
//http://developer.android.com/intl/es/reference/android/view/LayoutInflater.html
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.listapersonalizada, parent, false);
// Locate the TextViews in listview_item.xml
txt1= (TextView) itemView.findViewById(R.id.txtID);
txt2 = (TextView) itemView.findViewById(R.id.txt_PRODUCTO);
txt3 = (TextView) itemView.findViewById(R.id.TXTvalor);
txt4 = (TextView) itemView.findViewById(R.id.txtCANTIDAD);
txt5 = (TextView) itemView.findViewById(R.id.txtDIA);
txt6 = (TextView) itemView.findViewById(R.id.txtMES);
txt7 = (TextView) itemView.findViewById(R.id.txtAÑO);
txt8 = (TextView)itemView.findViewById(R.id.txtTotal);
// Capture position and set to the TextViews
txt1.setText(id);
txt2.setText(nombre);
txt3.setText(valor);
txt4.setText(cantidad);
txt8.setText(total);
txt5.setText(dia);
txt6.setText(mes);
txt7.setText(ano);
return itemView;
}
}
Code of the main class in which the custom list is trying to be opened.
package com.example.aguila0017.auxiliarcompras;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.format.Time;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Date;
public class MainActivity extends AppCompatActivity {
ListaPersonalizada listaPersonalizada;
EditText et_nombre, et_cantidad, et_valor, et_total, et_acomulador;
int valor=0, total, cantiadad=0 , acomulador=0;
int dia,mes,ano;
int NOMBRE,CANTIDAD,VALOR,TOTAL,DIA,MES,ANO;
int ID;
ListView lista;
Button sumar, btn_ver, btn_NuevaCompra, btn_listaFechas;
ArrayList<String> listado, ListadoFechas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
lista = (ListView)findViewById(R.id.lista);
lista = (ListView)findViewById(R.id.lista);
et_nombre = (EditText) findViewById(R.id.et_NomProducto);
et_cantidad = (EditText) findViewById(R.id.et_cantidad);
et_valor = (EditText) findViewById(R.id.et_valor);
et_total = (EditText) findViewById(R.id.et_total);
et_acomulador=(EditText) findViewById(R.id.et_acomulador);
sumar = (Button) findViewById(R.id.bt_modifocar);
btn_ver = (Button)findViewById(R.id.btn_ver);
btn_NuevaCompra = (Button)findViewById(R.id.btn_NuevaCompra);
btn_listaFechas = (Button)findViewById(R.id.btn_LFechas);
btn_listaFechas.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainActivity.this,Organizador.class);
startActivity(i);
}
});
btn_NuevaCompra.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
int dia=today.monthDay;
int mes = today.month;
int year = today.month;
mes = mes + 1;
nuevaCompra(dia,mes,year);
et_nombre.setText("");
et_cantidad.setText("");
et_valor.setText("");
et_acomulador.setText("");
et_total.setText("");
acomulador=acomulador-acomulador;
}
});
btn_ver.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, lista.class);
startActivity(intent);
}
});
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.ButtonFloat);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
valor= Integer.valueOf(et_valor.getText().toString());
cantiadad= Integer.valueOf(et_cantidad.getText().toString());
total= valor*cantiadad;
et_total.setText(""+total);
acomulador = acomulador + total;
et_acomulador.setText(""+acomulador);
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
ano=today.year;
mes=today.month+1;
dia = today.monthDay;
guardar(et_nombre.getText().toString(),valor,cantiadad,total,acomulador,dia,mes,ano);
et_nombre.setText("");
et_cantidad.setText("");
et_valor.setText("");
}
});
/*Boton basico reemplazado por el floatbutton
FUNCION: añade registros y hace el respectivo calculo de dar el total.
sumar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
valor= Integer.valueOf(et_valor.getText().toString());
cantiadad= Integer.valueOf(et_cantidad.getText().toString());
total= valor*cantiadad;
et_total.setText(""+total);
acomulador = acomulador + total;
et_acomulador.setText(""+acomulador);
guardar(et_nombre.getText().toString(),valor,cantiadad,total,acomulador);
et_nombre.setText("");
et_cantidad.setText("");
et_valor.setText("");
}
});
*/
}
@Override
protected void onPostResume() {
super.onPostResume();
Cargarlistado();
}
private void Cargarlistado() {
listado = lista();
listaPersonalizada = new ListaPersonalizada(MainActivity.this,lista());
lista.setAdapter(listaPersonalizada);
private void guardar (String NOMBRE ,int VALOR, int CANTIDAD, int TOTAL ,int ACOMULADO, int DIA, int MES, int ANO){
BaseHelper helper = new BaseHelper(this,"Demo",null,1);
SQLiteDatabase db = helper.getWritableDatabase();
try{
ContentValues c = new ContentValues();
c.put("Nombre",NOMBRE);
c.put("Valor", VALOR);
c.put("Cantidad",CANTIDAD);
c.put("Total",TOTAL);
c.put("Acomulado",ACOMULADO);
c.put("DIA",DIA);
c.put("MES",MES);
c.put("ANO",ANO);
db.insert("REGISTROS",null,c);
db.close();
Toast.makeText(this,"Articulo Ingresado.",Toast.LENGTH_SHORT).show();
}
catch (Exception e){
Toast.makeText(this,"Error: "+e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
private ArrayList<String> lista(){
ArrayList<String>datos = new ArrayList<String>();
BaseHelper helper = new BaseHelper(this,"Demo",null,1);
SQLiteDatabase db = helper.getReadableDatabase();
String sql = "select Id, Nombre, Valor, Cantidad, Total, DIA, MES,ANO from Registros";
Cursor c = db.rawQuery(sql,null);
if (c.moveToFirst()){
do{
String linea = c.getInt(0)+" "+c.getString(1)+" "+c.getInt(2)+" "+c.getInt(3)+" "+c.getInt(4)+" "+c.getInt(5)+" "+c.getInt(6)+" "+c.getInt(7);
datos.add(linea);
}while (c.moveToNext());
}
db.close();
return datos;
}
private void nuevaCompra(int DIA, int MES, int YEAR){
BaseHelper helper = new BaseHelper(this,"Fecha",null,1);
SQLiteDatabase db = helper.getWritableDatabase();
try{
ContentValues c = new ContentValues();
c.put("DIA",DIA);
c.put("MES",MES);
c.put("YEAR",YEAR);
db.insert("FECHAS",null,c);
db.close();
Toast.makeText(this,"Nueva Compra en proceso...",Toast.LENGTH_SHORT).show();
}
catch (Exception e){
Toast.makeText(this,"Error: "+e.getMessage(),Toast.LENGTH_SHORT).show();
}
}
}
Well, what I recommend is that you create an object in which you store all the data obtained by the cursor from the database and that you pass that object to the adapter of the custom ListView. Already in the adapter you get all the data and show them in the graphical interface. That way your adapter's constructor won't need to receive as many parameters.
Although if you want to know why your code does not work, it is because you are passing the list array to the adapter constructor, when what it receives is a large number of String parameters, so your code must also give an error of syntax.
Well here is the solution.
Data Class
list() method
CustomList