0

I am having great trouble with this. I half my database in Back4app and the first GridView I load are elements from the server however they take some time to load.So i was researching Progress Bar and i handle my relative layout using visibility.i thought that the done method was called whenever it finished loading. so here is my code please help..

import android.content.Intent;
import android.os.Bundle;

import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;

import com.example.mac.mycarapp.Adapter.InmobiliariaAdapter;
import com.example.mac.mycarapp.Adapter.RecyclerTouchListener;
import com.example.mac.mycarapp.R;
import com.parse.FindCallback;
import com.parse.GetCallback;
import com.parse.ParseException;
import com.parse.ParseFile;
import com.parse.ParseObject;
import com.parse.ParseQuery;
import com.parse.ParseUser;

import java.util.ArrayList;
import java.util.List;

public class PropiedadesInmobiliariasFragment extends Fragment {

private LinearLayoutManager layoutManager;
RecyclerView recyclerInmobiliarias;
ParseObject queryEmpresa;
ParseObject empresa;
String stringEmpresa;
List<ParseObject> allItems;
FragmentManager fm;
ProgressBar pb;


public PropiedadesInmobiliariasFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_propiedades_inmobiliarias, container, false);
    pb=view.findViewById(R.id.progress_bar_inmo);

    recyclerInmobiliarias=(RecyclerView)view.findViewById(R.id.recycler_inmobiliarias);
    pb.setVisibility(View.VISIBLE);
    recyclerInmobiliarias.setVisibility(View.GONE);

    allItems=new ArrayList<>();

    queryEmpresa();
    layoutManager=new GridLayoutManager(getContext(),2);
    recyclerInmobiliarias.setHasFixedSize(true);
    recyclerInmobiliarias.setLayoutManager(layoutManager);

    recyclerInmobiliarias.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerInmobiliarias, new RecyclerTouchListener.ClickListener() {
        @Override
        public void onClick(View view, int position) {

            ParseObject item=allItems.get(position);

            String selectedObjectId= item.getObjectId();
            String nombrePro=item.getString("NombrePropiedad");
            ParseFile object1 = item.getParseFile("imagenPrincipal");
            ParseFile imagen1 = item.getParseFile("imagen1");
            ParseFile imagen2 = item.getParseFile("imagen2");
            ParseFile imagen3 = item.getParseFile("imagen3");
            ParseFile imagen4 = item.getParseFile("imagen4");
            ParseFile imagen5 = item.getParseFile("imagen5");
            ParseFile imagen6 = item.getParseFile("imagen6");
            ParseFile imagen7 = item.getParseFile("imagen7");
            ParseFile imagen8 = item.getParseFile("imagen8");

            String precio=item.getString("Precio");
            String numHabita=item.getString("numeroDeHabitaciones");
            String metrosCuadrados=item.getString("metrosCuadrados");
            String numeroBanos=item.getString("numeroBanos");
            String descrip=item.getString("descripcionAdicionalPropiedad");
            String admin=item.getString("valorAdministracion");
            String numPar=item.getString("Parqueaderos");

            Bundle bundle=new Bundle();
            bundle.putString("objectId",selectedObjectId);
            bundle.putString("Nombre",nombrePro);
            bundle.putString("primeraFoto", object1.getUrl());
            bundle.putString("precio",precio);
            bundle.putString("numHab",numHabita);
            bundle.putString("metrosCua",metrosCuadrados);
            bundle.putString("numBanos",numeroBanos);
            bundle.putString("des",descrip);
            bundle.putString("admin",admin);
            bundle.putString("parq",numPar);
//
//                fm=getFragmentManager();
//                Fragment detalleInmobiliaria=new DetalleInmobiliaria();
//                detalleInmobiliaria.setArguments(bundle);
//
//                fm.beginTransaction().replace(R.id.framelayout,detalleInmobiliaria).commit();
                Intent intent = new Intent(getActivity(), DetalleInmobiliaria.class);
                intent.putExtra("objectId", selectedObjectId);
                intent.putExtra("Nombre", nombrePro);
                intent.putExtra("primeraFoto", object1.getUrl());
                intent.putExtra("precio", precio);
                intent.putExtra("numHab", numHabita);
                intent.putExtra("metrosCua", metrosCuadrados);
                intent.putExtra("numBanos", numeroBanos);
                intent.putExtra("des", descrip);
                intent.putExtra("admin", admin);
                intent.putExtra("parq", numPar);
                startActivity(intent);
            }
            @Override
            public void onLongClick(View view, int position) {
        }
    }));

    return view;


}

private void queryEmpresa(){
    /**Ojo no es que no este sirviendo el metodo sino que el tipo de empresa asignado al usuario
     * no concuerda para que llene el recycler*/
    ParseQuery<ParseUser> query = ParseUser.getQuery();
    query.whereEqualTo("objectId",ParseUser.getCurrentUser().getObjectId());
    query.include("Empresa");
    query.getInBackground(ParseUser.getCurrentUser().getObjectId(), new GetCallback<ParseUser>() {
        public void done(ParseUser object, ParseException e) {
            if (e == null) {
                // object will be your user and you should be able to retrieve Empresa like this
                empresa = object.getParseObject("Empresa");
                stringEmpresa=empresa.getObjectId();
                queryPropInmo();
            } else {
                // something went wrong. It would be good to log.
            }
        }
    });

}

private void queryPropInmo(){
    ParseQuery<ParseObject> query1 = ParseQuery.getQuery("PropiedadesInmobiliarias");
    queryEmpresa=ParseObject.createWithoutData("Empresa",stringEmpresa);
    query1.whereEqualTo("Empresa",queryEmpresa);
    query1.include("Empresa");
    query1.include("Imagenes");

   query1.findInBackground(new FindCallback<ParseObject>() {
       @Override
       public void done(List<ParseObject> objects, ParseException e) {
           pb.setVisibility(View.GONE);
           recyclerInmobiliarias.setVisibility(View.VISIBLE);

           if(objects!=null) {

               for (ParseObject obj : objects
               ) {
                   allItems.add(obj);

               }
           }
           InmobiliariaAdapter adapter = new InmobiliariaAdapter(getActivity(),allItems);
           recyclerInmobiliarias.setAdapter(adapter);
           adapter.notifyDataSetChanged();
       }
   });
}

}

Felipe Franco
  • 171
  • 3
  • 15
  • What is happening exactly? Does it never show up? Or does it never become invisible again? Do you have some error in your logs? – Davi Macêdo Nov 09 '19 at 01:30
  • Hello davi thank you for the reply. What happens is that i dont know in which moment to make it invisible . i want to show the gridview when all data is loaded from parse. Because at the moment burned values from the xml are being showed in textviews and in imageviews it is showing the default src i entered. – Felipe Franco Nov 09 '19 at 03:11
  • Have you tried to move to the end of the done function? – Davi Macêdo Nov 10 '19 at 01:38

0 Answers0