Recyclerview перейти наверх, когда я нажимаю на элемент и открываю диалог
Когда я нажимаю на элемент, я могу открыть диалоговое окно с подробной информацией о выбранном элементе. Но проблема в том, что, когда я нажимаю на пункт, утилита переходит наверх, а затем появляется диалоговое окно. Я хочу, чтобы просмотрщик сохранял свою позицию, когда появляется диалоговое окно и когда закрывается.
Это адаптер.
public class ListaPedidosUsuarioNoExitosos extends RecyclerView.Adapter<ListaPedidosUsuarioNoExitosos.ListaPedidosUsuarioNoExitososViewHolder> {
private List<Pedido> pedidos=new ArrayList<>();
public OnItemClickListenerPedidosUsuariosNoExitosos mlistener;
private Context mContext;
public void add(Pedido plato){
pedidos.add(plato);
notifyItemInserted(pedidos.size()-1);
}
public interface OnItemClickListenerPedidosUsuariosNoExitosos {
void onItemClickedPedidosUsuariosUsuariosNoExitosos(View v);
}
@Override
public ListaPedidosUsuarioNoExitosos.ListaPedidosUsuarioNoExitososViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_pedidos_usuario, parent, false);
ListaPedidosUsuarioNoExitososViewHolder rvMainAdapterViewHolder = new ListaPedidosUsuarioNoExitososViewHolder(view);
return rvMainAdapterViewHolder;
}
@Override
public void onBindViewHolder(ListaPedidosUsuarioNoExitosos.ListaPedidosUsuarioNoExitososViewHolder holder, int position) {
Pedido pediditos = pedidos.get(position);
String fechaaa= pediditos.getFechaPedido().toString();
String fechaPrimeraParte=fechaaa.substring(0,16);
String fechaSegundaParte=fechaaa.substring(20,21);
String fechaTerceraParte=fechaaa.substring(21);
String fechaFormateada=fechaPrimeraParte+" "+fechaSegundaParte+fechaTerceraParte;
holder.idPedido.setText(pediditos.getId_usuario().toString());//el id_usuario sera el idPedido
holder.idChef.setText(pediditos.getId_plato().toString());//este sera el id del chef
holder.idUserChef.setText(pediditos.getId_usuarioChef().toString());//este sera el id del chef
holder.nombreplato.setText(pediditos.getNombrePlato().toString());
holder.nombreChef.setText("Chef "+pediditos.getNombreComensal().toString());//nombre comensal sera el nombre del chef
Double preciodob=Double.valueOf(pediditos.getPrecioPlato().toString());
Integer precioformateado=preciodob.intValue();
String precioFinal=precioformateado.toString();
holder.precio.setText(precioFinal);//este precioplato en realidad es el total
holder.fecha.setText(fechaFormateada);
holder.servicioSolicitado.setText(pediditos.getServicioSolicitado().toString());
//el mnombre plato es un booleano que devueltre true si el pedido esta cancelado o false si es que no
if(pediditos.getNombrePlato()=="true")
{
//este estadoPedido es solo para mostrar el estado en un string
holder.estadoPedido.setText(mContext.getString(R.string.Cancelado));
holder.estadoPedido.setVisibility(View.VISIBLE);
holder.estadoPedido.setTextColor(Color.RED);
}
else
{
//esta condicion es si el pedido a sido tomado
if (pediditos.getPedidoTomado() == "true") {
holder.estadoPedido.setVisibility(View.VISIBLE);
holder.estadoPedido.setTextColor(Color.argb(255,57,105,43));
holder.estadoPedido.setText(mContext.getString(R.string.Calificar));
} else {
if (pediditos.getPedidoEnviadoAlChef() == "false")
{
holder.estadoPedido.setVisibility(View.VISIBLE);
holder.estadoPedido.setTextColor(Color.RED);
holder.estadoPedido.setText(mContext.getString(R.string.Enviar_pedido));
}
else {
holder.estadoPedido.setVisibility(View.VISIBLE);
holder.estadoPedido.setTextColor(Color.argb(255,57,105,43));
holder.estadoPedido.setText(mContext.getString(R.string.Esperando_al_chef));
}
}
}
}
@Override
public int getItemCount() {
return pedidos.size();
}
class ListaPedidosUsuarioNoExitososViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{//}, View.OnLongClickListener{
TextView idPedido,idChef,idUserChef,nombreplato,nombreChef,precio,fecha,servicioSolicitado,estadoPedido;
public ListaPedidosUsuarioNoExitososViewHolder (View v){
super(v);
idPedido=(TextView) v.findViewById(R.id.tv_id_pedido_PedidosUsuario);
idChef=(TextView) v.findViewById(R.id.tv_id_chef_PedidosUsuario);
idUserChef=(TextView) v.findViewById(R.id.tv_id_Userchef_PedidosUsuario);
nombreplato=(TextView) v.findViewById(R.id.tv_nombrePlato_PedidosUsuario);
nombreChef=(TextView) v.findViewById(R.id.tv_nombreChef_PedidosUsuario);
precio=(TextView) v.findViewById(R.id.tv_precioPlato_PedidosUsuario);
fecha=(TextView) v.findViewById(R.id.tv_fechapedido_PedidosUsuario);
servicioSolicitado=(TextView) v.findViewById(R.id.tv_servicioSolicitado_PedidosUsuario);
estadoPedido=(TextView)v.findViewById(R.id.tv_estadoPedido_PedidosUsuario);
//v.setOnLongClickListener(this);
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
SharedPreferences preferencias=v.getContext().getSharedPreferences("PedidoUsuarioNoExitoso",Context.MODE_PRIVATE);
SharedPreferences.Editor editor=preferencias.edit();
editor.putInt("idpedido", Integer.parseInt(idPedido.getText().toString()) );
editor.putInt("idchefPedido", Integer.parseInt(idChef.getText().toString()) );
editor.putString("nombrePlato",nombreplato.getText().toString() );
editor.putString("totalPedido",precio.getText().toString() );
editor.putString("estadoPedido",estadoPedido.getText().toString() );
editor.putString("nombreChef",nombreChef.getText().toString() );
editor.putInt("iduserchefPedido", Integer.parseInt(idUserChef.getText().toString()) );
editor.commit();
mlistener.onItemClickedPedidosUsuariosUsuariosNoExitosos(v);
}
}
public ListaPedidosUsuarioNoExitosos(OnItemClickListenerPedidosUsuariosNoExitosos listener, Context context, ArrayList<Pedido> pedidos){
this.pedidos=pedidos;
this.mlistener=listener;
this.mContext=context;
}
}
Это деятельность
public class PedidosUsuarioActivity extends AppCompatActivity implements
ListaPedidosUsuarioNoExitosos.OnItemClickListenerPedidosUsuariosNoExitosos
{
RecyclerView recyclerviewPedidosUsuarioNoExitosos;
private ListaPedidosUsuarioNoExitosos adapter;
private ListaPedidosUsuarioNoExitosos.OnItemClickListenerPedidosUsuariosNoExitosos mlistener;
@Override
public void onItemClickedPedidosUsuariosUsuariosNoExitosos(View v) {
DetallePedidoUsuario df= new DetallePedidoUsuario();
df.show(getSupportFragmentManager(), "Dialog");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menupedidos, menu);
SharedPreferences prefe = getSharedPreferences("DatosPreferenciales", Context.MODE_APPEND);
String telef = prefe.getString("telefono_preferente", "");
if(telef.equals(""))
{
menu.findItem(R.id.action_actualizaTelefono).setVisible(false);
}
else
{
menu.findItem(R.id.action_registraTelefono).setVisible(false);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
int id = item.getItemId();
//si le doy a la opcion limpiar historial
if (id == R.id.action_limpiarHistorial) {
//tarea asincrona para borrar historial de pedidos
WS_LimpiaHistorialPedidosUsuario task = new WS_LimpiaHistorialPedidosUsuario();
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
//le doy null como adpatador el recyclerview
// recyclerviewPedidosUsuarioNoExitosos.setAdapter(null);
}
if (id == R.id.action_actualizaTelefono) {
EditarTelefonoUsuario df= new EditarTelefonoUsuario();
df.show(getSupportFragmentManager(), "Dialog");
}
if (id == R.id.action_registraTelefono) {
EditarTelefonoUsuario df= new EditarTelefonoUsuario();
df.show(getSupportFragmentManager(), "Dialog");
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onStart() {
super.onStart();
actualizapedidoscada15segundos();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pedidos_usuario);
//inicializo el toolbar y atras button
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_PedidosUsuarioNoExitosos);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//inicializo el recyclerview
recyclerviewPedidosUsuarioNoExitosos=(RecyclerView) findViewById(R.id.rv_pedidosUsuario);
recyclerviewPedidosUsuarioNoExitosos.setLayoutManager(new LinearLayoutManager(getApplicationContext()));
// noTienePedidos=(TextView)findViewById(R.id.tv_noTienePedidos);
//listeners de click de la lista de pedidos
mlistener=this;
SharedPreferences preferencias=getSharedPreferences("AgregaPlato",Context.MODE_PRIVATE);
SharedPreferences.Editor editor=preferencias.edit();
editor.putBoolean("BorroBotonNuevoPedido", false );
editor.putBoolean("AgregaASoloUnPedido", false );
editor.commit();
if(Conexion.isConnectedToInternet(getApplicationContext())==true)
{
WS_PedidosUsuarioNoExitosos task= new WS_PedidosUsuarioNoExitosos();
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
else
{
Toast toast = Toast.makeText(getApplicationContext(),getApplicationContext().getString(R.string.No_esta_conectado_a_Internet), Toast.LENGTH_SHORT);
toast.show();
}
}
}
Это диалог, который открывается при нажатии
public class DetallePedidoUsuario extends DialogFragment implements
ListaDetallePedidos.OnItemClickListenerDetallePedidos,
ListaPedidosUsuarioNoExitosos.OnItemClickListenerPedidosUsuariosNoExitosos
{
//evento click de la lista de pedidos
@Override
public void onItemClickedPedidosUsuariosUsuariosNoExitosos(View v) {
// POSICION=position;
DetallePedidoUsuario df= new DetallePedidoUsuario();
df.show(getFragmentManager(), "Dialog");
}
@Override
public void onStart()
{
super.onStart();
Dialog dialog = getDialog();
if (dialog != null)
{
//numero de pixeles que tendra de ancho
// int width = 700;
int width=ViewGroup.LayoutParams.MATCH_PARENT;
//la altura se ajustara al contenido
int height = ViewGroup.LayoutParams.WRAP_CONTENT;
//se lo asigno a mi dialogfragment
dialog.getWindow().setLayout(width, height);
}
}
@Override
public Dialog onCreateDialog (Bundle savedInstanceState) {
View view = getActivity().getLayoutInflater().inflate(R.layout.detalle_pedido_usuario, new LinearLayout(getActivity()), false);
//inicializo los controles
nombreChef=(Button)view.findViewById(R.id.tv_NombreChef_DetallePedidoUsuario);
totalPedido=(TextView)view.findViewById(R.id.tv_Total_DetallePedidoUsuario);
cancelaPedido=(Button)view.findViewById(R.id.btn_Cancelar_DetallePedidoUsuario);
calificar=(Button)view.findViewById(R.id.btn_Calificar_DetallePedidoUsuario);
enviarPedido=(Button)view.findViewById(R.id.btn_EnviarPedido_DetallePedidoUsuario);
//inicializo la lista de detalle de pedidos
recyclerviewDetallePedidos=(RecyclerView) view.findViewById(R.id.rv_detallePedidoUsuario);
recyclerviewDetallePedidos.setLayoutManager(new LinearLayoutManager(this.getActivity().getApplicationContext()));
//inicializo la lista de pedidos (cargo esta lista denuevo xq al salir del dialog vuelva a refrescar la lista)
recyclerviewPedidosUsuarioNoExitosos=(RecyclerView) getActivity().findViewById(R.id.rv_pedidosUsuario);
recyclerviewPedidosUsuarioNoExitosos.setLayoutManager(new LinearLayoutManager(getActivity().getApplicationContext()));
//tarea asincrona que lista el detalle del pedido
WS_ListaDetallePedidos task=new WS_ListaDetallePedidos();
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
SharedPreferences prefe=getActivity().getSharedPreferences("DatosPreferenciales", Context.MODE_PRIVATE);
NOMBREUSUARIO=prefe.getString("nombre_preferente","");
IDUSUARIO=prefe.getInt("id_preferente",0);
SharedPreferences prefer=getActivity().getSharedPreferences("PedidoUsuarioNoExitoso", Context.MODE_PRIVATE);
EstadoPedido=prefer.getString("estadoPedido","");
String NombreChef=prefer.getString("nombreChef","");
String TotalPedido=prefer.getString("totalPedido","");
// TOTAL=Double.parseDouble(TotalPedido);
// totalPedido.setText("TOTAL: /S. "+TOTAL.toString());
totalPedido.setText("TOTAL: "+getContext().getString(R.string.Dinero)+TotalPedido);
if(EstadoPedido.equals(getContext().getString(R.string.Calificar)))
{
enviarPedido.setVisibility(View.GONE);
cancelaPedido.setVisibility(View.GONE);
calificar.setVisibility(View.VISIBLE);
nombreChef.setVisibility(View.GONE);
}
else
{
if(EstadoPedido.equals(getContext().getString(R.string.Cancelado)))
{
enviarPedido.setVisibility(View.GONE);
cancelaPedido.setVisibility(View.GONE);
calificar.setVisibility(View.GONE);
// totalPedido.setVisibility(View.GONE);
nombreChef.setVisibility(View.GONE);
}
else
{
if(EstadoPedido.equals(getContext().getString(R.string.Enviar_pedido)))
{
enviarPedido.setVisibility(View.VISIBLE);
cancelaPedido.setVisibility(View.VISIBLE);
calificar.setVisibility(View.GONE);
}
else {
enviarPedido.setVisibility(View.GONE);
cancelaPedido.setVisibility(View.VISIBLE);
calificar.setVisibility(View.GONE);
nombreChef.setVisibility(View.GONE);
}
}
}
calificar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//aki hacer un intent para un dialog fragment que tenga un rating bar para calificar-
CalificacionPedido df= new CalificacionPedido();
df.show(getFragmentManager(), "Dialog");
}
});
cancelaPedido.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
CUERPO=NOMBREUSUARIO+" "+getContext().getString(R.string.A_cancelado_el_pedido);
TITULO=getContext().getString(R.string.Pedido_cancelado);
WS_UsuarioCancelaPedido task=new WS_UsuarioCancelaPedido();
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
// Toast.makeText(getContext(), "Pedido cancelado", Toast.LENGTH_SHORT).show();
}
});
enviarPedido.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//aca setear enviadoAlChef=1
CUERPO=NOMBREUSUARIO+" "+getContext().getString(R.string.A_realizado_un_pedido);
TITULO=getContext().getString(R.string.Nuevo_pedido);
WS_UsuarioEnviaPedidoAlChef task = new WS_UsuarioEnviaPedidoAlChef();
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
});
//muestro del nombre del chef y su evento click
// nombreChef.setText(NombreChef);
nombreChef.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//que me lleve al perfilchef de los pedidos del usuario
SharedPreferences preferencias=v.getContext().getSharedPreferences("AgregaPlato",Context.MODE_PRIVATE);
SharedPreferences.Editor editor=preferencias.edit();
editor.putBoolean("BorroBotonNuevoPedido", true );
editor.putBoolean("AgregaASoloUnPedido", true );
editor.commit();
Intent intento = new Intent(getActivity().getApplicationContext(), PerfilChefPedidosUsuarioActivity.class);
startActivity(intento);
}
});
//listeners del evento click de las listas
m_listener=this;
milistener=this;
Dialog builder = new Dialog(getActivity());
builder.requestWindowFeature(Window.FEATURE_NO_TITLE);
builder.setContentView(view);
return builder;
}
}
1 ответ
Я не совсем уверен, что это весь ваш код, но я предполагаю, что когда вы закрываете диалоговое окно, ваша деятельность переинициализируется, поэтому ваш адаптер повторного просмотра настраивается снова и снова, и именно поэтому вы переходите наверх списка, потому что его повторно инициализировали, но опять же это только предположение.
Проверьте это и дайте мне знать