Reputation: 25
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
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