TransWikia.com

Como pasar datos desde un Activity a un Adaptador?

Stack Overflow en español Asked on November 17, 2021

Hola mi problema es el siguiente estoy desarrollando una app en android donde tengo un Activity y un RecyclerView.Adapter, donde lo q quiero es pasar unos parametros desde la activity hacia el adapter por medio de in intent. El problema radica en que no consigo poder enviar los datos que se encuentran dentro del metodo enviarDatos hacia el adapter.

AsignarTurno.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);
}
}

One Answer

Los intent se utilizan para pasar datos entre actividades y un adaptador no es una actividad, por eso no le puedes pasar datos utilizando utilizando un intent.

Pasar datos a un Adaptador es sencillo, tan solo tienes que crear un método en el adaptador al que llames cada vez que quieras pasarle información.

public class AtencionAdapter extends RecyclerView.Adapter<AtencionHolder> 
implements Filterable {

    String paciente,fecha, horas, especialista;

    ...

    @Override
    public void onBindViewHolder(AtencionHolder holder, int position) {
        final Atencion at = atencion.get(position);

        ...

        holder.agregar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                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();

            }
        });
    }

    /**
     * Envia nuevos datos al adaptador.
     * */
    public void enviarDatos(String paciente, String especialista, String fecha) {

        // Actualizas los valores de las variables
        paciente = paciente;
        especialista = especialista;
        fecha = fecha;
    }
}

En tu actividad llamas al método de la siguiente manera:

public class AsignarTurno extends AppCompatActivity{

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_asignar_turno);

        ...

        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();
                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);

                pacienteTurno = edtPaciente.getText().toString();
                especialistaTurno = edtEspecialista.getText().toString();
                fechaTurno = fecha;

                // Envias los datos al adaptador
                adapter.enviarDatos(pacienteTurno, especialistaTurno, fechaTurno);
            }
        });
    }

    ...
}

Answered by David Minaya on November 17, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP