Hello my problem is the following one I am developing an app in android where I have an Activity and a RecyclerView.Adapter, where what I want is to pass some parameters from the activity to the adapter by means of in intent. The problem is that I can not send the data that is inside the method to send data to the adapter.
AssignTurning.java
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CalendarView;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Spinner;
import com.example.clinica.clinica.DTO.Atencion;
import com.example.clinica.clinica.DTO.Especialidad;
import com.example.clinica.clinica.DTO.Medico;
import com.example.clinica.clinica.sqlite.BaseDeDatos;
import com.example.clinica.clinica.sqlite.Tablas;
import java.util.ArrayList;
import java.util.Calendar;
public class AsignarTurno extends AppCompatActivity{
CalendarView calendarView;
RecyclerView turnoView;
public String fecha;
String hora, dia, medicos;
EditText edtPaciente, edtEspecialista;
ImageButton addPaciente, addEspecialista;
BaseDeDatos db;
Spinner spEspecialidades, spEspecialistas;
String nombre, apellido;
private Dialog dialog;
ArrayList<String> listaMedicos, listaEspecialidades;
ArrayList<Medico> MedicosList;
ArrayList<Especialidad> EspecialidadesList;
AtencionAdapter adp;
AtencionHolder holder;
String item;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_asignar_turno);
db = new BaseDeDatos(this, null, null, 1);
turnoView = (RecyclerView) findViewById(R.id.listaTurnosDisponibles);
turnoView.setLayoutManager(new LinearLayoutManager(this));
turnoView.setItemAnimator(new DefaultItemAnimator());
calendarView = (CalendarView) findViewById(R.id.calendario);
addPaciente = (ImageButton) findViewById(R.id.addPaciente);
addEspecialista = (ImageButton) findViewById(R.id.addEspecialista);
edtPaciente = (EditText) findViewById(R.id.turnoPaciente);
edtEspecialista = (EditText) findViewById(R.id.turnoEspecialista);
addEspecialista.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater inflater = getLayoutInflater();
final View dialogLayout = inflater.inflate(R.layout.dialog_especialista, null);
spEspecialidades = (Spinner) dialogLayout.findViewById(R.id.spEspecialidades);
spEspecialistas = (Spinner) dialogLayout.findViewById(R.id.spEspecialista);
Button aceptar = (Button) dialogLayout.findViewById(R.id.btnAceptarEspecialista);
Button cancelar = (Button) dialogLayout.findViewById(R.id.btnCancelarEspecialista);
cargarSpinnerEspecialidades();
final ArrayAdapter<String> adaptador = new ArrayAdapter(AsignarTurno.this, android.R.layout.simple_spinner_item, listaEspecialidades);
spEspecialidades.setAdapter(adaptador);
spEspecialidades.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
item = spEspecialidades.getSelectedItem().toString();
if (item == "Seleccione") {
spEspecialistas.setEnabled(false);
} else {
spEspecialistas.setEnabled(true);
cargarSpinnerMedicos(item);
final ArrayAdapter<String> adapter = new ArrayAdapter(AsignarTurno.this, android.R.layout.simple_spinner_item, listaMedicos);
spEspecialistas.setAdapter(adapter);
spEspecialistas.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(AsignarTurno.this);
builder.setView(dialogLayout);
dialog = builder.show();
cancelar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
aceptar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edtEspecialista.setText(spEspecialistas.getSelectedItem().toString());
dialog.dismiss();
}
});
}
});
addPaciente.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater inflater = getLayoutInflater();
final View dialogLayout = inflater.inflate(R.layout.dialog_buscar_paciente, null);
Button buscar = (Button) dialogLayout.findViewById(R.id.btnBuscarPacienteDialog);
Button volver = (Button) dialogLayout.findViewById(R.id.btnCancelarPacienteDialog);
final EditText edtDni = (EditText) dialogLayout.findViewById(R.id.edtDialogDni);
buscar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (edtDni.getText().toString().length() > 0) {
Cursor c = pacientePorDni(Integer.parseInt(edtDni.getText().toString()));
edtPaciente.setText((c.getString(c.getColumnIndexOrThrow("apellido")) + " " + (c.getString(c.getColumnIndexOrThrow("nombre")))));
dialog.dismiss();
}
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(AsignarTurno.this);
builder.setView(dialogLayout);
dialog = builder.show();
volver.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
}
});
calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView calendarView, int i, int i1, int i2) {
fecha = i2 + "-" + (i1 + 1) + "-" + i;
medicos = spEspecialistas.getSelectedItem().toString();
final AtencionAdapter adapter = new AtencionAdapter(AsignarTurno.this, listaAtencion(medicos));
turnoView.setAdapter(adapter);
Calendar c = Calendar.getInstance();
c.set(i, (i1+1) , (i2-3));
int diaSemana = c.get(Calendar.DAY_OF_WEEK);
dia = filtrarDia(diaSemana);
adapter.getFilter().filter(dia);
enviarDatos();
}
}
);
}
public void cargarSpinnerMedicos(String item) {
Medico m=null;
SQLiteDatabase data=db.getWritableDatabase();
String query = "SELECT * FROM " + Tablas.TABLA_MEDICO + " WHERE " + Tablas.COLUMNA_ESPECIALIDAD + " = '" + item + "';";
Cursor cursor = data.rawQuery(query, null);
MedicosList = new ArrayList<>();
while (cursor.moveToNext()){
m=new Medico();
m.setNombre(cursor.getString(1));
m.setApellido(cursor.getString(2));
m.setEspecialidad(cursor.getString(10));
Log.i("Nombre",m.getNombre());
MedicosList.add(m);
}
obtenerListaMedicos();
}
public void obtenerListaMedicos() {
listaMedicos=new ArrayList<String>();
listaMedicos.add("Seleccione");
for(int i=0;i<MedicosList.size();i++){
listaMedicos.add(MedicosList.get(i).getNombre() + " " + MedicosList.get(i).getApellido());
}
}
public Cursor pacientePorDni(int dni) {
SQLiteDatabase bd = db.getWritableDatabase();
String query = "SELECT * FROM " + Tablas.TABLA_PACIENTE + " WHERE " + Tablas.COLUMNA_DNI_PACIENTE + " = " + dni + ";";
Cursor c = bd.rawQuery(query, null);
if (c != null) {
c.moveToFirst();
}
return c;
}
public void cargarSpinnerEspecialidades() {
SQLiteDatabase data = db.getReadableDatabase();
Especialidad e = null;
EspecialidadesList = new ArrayList<Especialidad>();
//select * from usuarios
Cursor cursor = data.rawQuery("SELECT * FROM " + Tablas.TABLA_ESPECIALIDAD, null);
while (cursor.moveToNext()) {
e = new Especialidad();
e.setNombre(cursor.getString(1));
Log.i("Nombre", e.getNombre());
EspecialidadesList.add(e);
}
obtenerListaEspecialidades();
}
public void obtenerListaEspecialidades() {
listaEspecialidades = new ArrayList<String>();
listaEspecialidades.add("Seleccione");
for (int i = 0; i < EspecialidadesList.size(); i++) {
listaEspecialidades.add(EspecialidadesList.get(i).getNombre());
}
}
public ArrayList<Atencion> listaAtencion(String medico) {
String sql = "SELECT * FROM " + Tablas.TABLA_ATENCION + " WHERE " + Tablas.COLUMN_ESPECIALISTA + " = '" + medico + "';";
SQLiteDatabase bd = db.getReadableDatabase();
ArrayList<Atencion> listaAtencion = new ArrayList<>();
Cursor cursor = bd.rawQuery(sql, null);
if (cursor.moveToFirst()) {
do {
String especialista = cursor.getString(1);
String dia = cursor.getString(2);
String hora = cursor.getString(4);
listaAtencion.add(new Atencion(especialista, dia, hora));
} while (cursor.moveToNext());
}
cursor.close();
return listaAtencion;
}
public String filtrarDia(int diaSemana){
if (diaSemana == 1) {
dia = "Domingo";
} else if (diaSemana == 2) {
dia = "Lunes";
} else if (diaSemana == 3) {
dia = "Martes";
} else if (diaSemana == 4) {
dia = "Miércoles";
} else if (diaSemana == 5) {
dia = "Jueves";
} else if (diaSemana == 6) {
dia = "Viernes";
} else if (diaSemana == 7) {
dia = "Sábado";
}
return dia;
}
public void enviarDatos(){
String pacienteTurno, fechaTurno, especialistaTurno;
pacienteTurno = edtPaciente.getText().toString();
especialistaTurno = edtEspecialista.getText().toString();
fechaTurno = fecha;
Intent intent = new Intent(this, AtencionAdapter.class);
intent.putExtra("paciente", pacienteTurno);
intent.putExtra("especialista", especialistaTurno);
intent.putExtra("fecha", fechaTurno);
startActivity(intent);
}
AtencionAdapter.java
import android.content.ContentValues;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import com.example.clinica.clinica.DTO.Atencion;
import com.example.clinica.clinica.sqlite.BaseDeDatos;
import com.example.clinica.clinica.sqlite.Tablas;
import java.util.ArrayList;
public class AtencionAdapter extends RecyclerView.Adapter<AtencionHolder>
implements Filterable {
Context c;
ArrayList<Atencion> atencion, listaFiltrada;
FiltroAtenciones filtro;
BaseDeDatos db;
AsignarTurno turno;
String paciente,fecha, horas, especialista;
public AtencionAdapter( Context ctx, ArrayList<Atencion> atencion){
this.c=ctx;
this.atencion=atencion;
this.listaFiltrada=atencion;
db = new BaseDeDatos(ctx, null, null, 1);
}
@Override
public AtencionHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_turno_disponible,null);
//HOLDER
AtencionHolder holder=new AtencionHolder(v);
return holder;
}
@Override
public void onBindViewHolder(AtencionHolder holder, int position) {
final Atencion at = atencion.get(position);
holder.hora.setText(atencion.get(position).getHoraInicio());
holder.dia.setText(atencion.get(position).getDia());
horas = atencion.get(position).getHoraInicio();
holder.agregar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle bundle = turno.getIntent().getExtras();
paciente = bundle.getString("paciente");
especialista = bundle.getString("especialista");
fecha = bundle.getString("fecha");
SQLiteDatabase db_active=db.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(Tablas.COLUMN_PACIENTE_TURNO,paciente);
values.put(Tablas.COLUMN_ESPECIALISTA_TURNO,especialista);
values.put(Tablas.COLUMN_DIA_TURNO,fecha);
values.put(Tablas.COLUMN_HORA_TURNO,horas);
db_active.insert(Tablas.TABLA_TURNO, null, values);
db_active.close();
}
});
}
@Override
public int getItemCount() {return atencion.size();
}
@Override
public Filter getFilter() {
if (filtro==null){
filtro = new FiltroAtenciones(listaFiltrada, this);
}
return filtro;
}
}
AtencionHolder.java
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
public class AtencionHolder extends RecyclerView.ViewHolder {
public TextView hora, dia;
public ImageView agregar;
public AtencionHolder(View itemView) {
super(itemView);
this.hora = (TextView) itemView.findViewById(R.id.itemHoraTurnoDisponible);
this.dia = (TextView) itemView.findViewById(R.id.itemDiaTurnoDisponible);
agregar = (ImageView) itemView.findViewById(R.id.addTurno);
}
}