Marcelo Casanovas
Marcelo Casanovas

Reputation: 25

How can call a method in onCreateView Android

How can I call a method in onCreateView in android Fragment?

onCreateView code:

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         final Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_user_list, container, false);
    btnBusquedaUserList = (Button) rootView.findViewById(R.id.btnBuscarUserList);
    rvUserList = (RecyclerView) rootView.findViewById(R.id.rvUserList);
    rvUserList.setLayoutManager(new LinearLayoutManager(getContext()));
    txtCIbusqueda = (TextInputEditText) rootView.findViewById(R.id.txtCIUserList);

    getActivity().setTitle("Lista Usuarios Check In");
    Bundle args = getArguments();
    idUsuario = args.getString("idLogueado");

    GetClient();

    btnBusquedaUserList.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ciUser = txtCIbusqueda.getText().toString();
            Object lista[] = new Object[2];
            lista[0] = ciUser;
            lista[1] = idUsuario;
            parametroApi.setDatoG(lista);
            GetClient();

        }
    });

    return rootView;


};

My method GetClient()

public void GetClient() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://80.241.210.8:8080/Exma/Service/api/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    ExmaApi service = retrofit.create(ExmaApi.class);
    Call<Respuesta<List<DataList>>>call=service.putClientList(parametroApi);

       call.enqueue(new Callback<Respuesta<List<DataList>>>() {
        @Override
        public void onResponse(Call<Respuesta<List<DataList>>> call, 
         Response<Respuesta<List<DataList>>> response) {
            if (response.isSuccessful()) {
                Respuesta<List<DataList>> respuesta = response.body();
                try {
                    if (respuesta.respuestaExitosa() == true) {
                        Log.d(TAG, "TodoBien: " + respuesta.toString());
                        rvAdapter = new MyRecyclerViewAdapter(getActivity().getApplicationContext(), respuesta);
                        rvUserList.setAdapter(rvAdapter);

                    }

                } catch (Exception e) {
                    Log.d(TAG, "onResponse" + "Ocurrio un Error");
                    e.printStackTrace();

                }
            }
        }

        @Override
        public void onFailure(Call<Respuesta<List<DataList>>> call, Throwable t) {
            Log.d(TAG, "TodoMal: " + t.getMessage().toString());

        }
    });


}

I have trouble when I want to call a method GetClient() in onCreateView, the method does not start, but in onClickListener from the button, the method start without problems, any way to call the method? in onCreateView from Fragments, I want to execute the method at the time that fragment start

Upvotes: 2

Views: 1702

Answers (1)

Cochi
Cochi

Reputation: 2209

Like Activities , Fragment have his own lifecycle

onCreateView : Called to have the fragment instantiate its user interface view. This is optional, and non-graphical fragments can return null (which is the default implementation). This will be called between onCreate(Bundle) and onActivityCreated(Bundle).

So you should move all initialization that doesn't concern graphical element in onStart(). For example :

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         final Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_user_list, container, false);
    btnBusquedaUserList = (Button) rootView.findViewById(R.id.btnBuscarUserList);
    rvUserList = (RecyclerView) rootView.findViewById(R.id.rvUserList);
    rvUserList.setLayoutManager(new LinearLayoutManager(getContext()));
    txtCIbusqueda = (TextInputEditText) rootView.findViewById(R.id.txtCIUserList);

    return rootView;
};

@Override
public void onStart() {

    getActivity().setTitle("Lista Usuarios Check In");
    Bundle args = getArguments();
    idUsuario = args.getString("idLogueado");
    GetClient();

    btnBusquedaUserList.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ciUser = txtCIbusqueda.getText().toString();
            Object lista[] = new Object[2];
            lista[0] = ciUser;
            lista[1] = idUsuario;
            parametroApi.setDatoG(lista);
            GetClient();

        }
    });
}

Hope this helps.

Sorry for my english.

Upvotes: 2

Related Questions