【问题标题】:How can call a method in onCreateView Android如何在onCreateView Android中调用方法
【发布时间】:2017-11-09 00:38:56
【问题描述】:

如何在 android Fragment 中调用 onCreateView 中的方法?

onCreateView 代码:

 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;


};

我的方法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());

        }
    });


}

当我想在onCreateView中调用方法GetClient()时遇到问题,该方法没有启动,但是在onClickListener中从按钮开始,该方法启动没有问题,有什么方法可以调用该方法?在来自FragmentsonCreateView 中,我想在该片段开始时执行该方法

【问题讨论】:

    标签: java android methods fragment retrofit


    【解决方案1】:

    像Activity,Fragment都有自己的lifecycle

    onCreateView :调用以使片段实例化其用户界面视图。这是可选的,非图形片段可以 返回 null (这是默认实现)。这将被称为 在 onCreate(Bundle) 和 onActivityCreated(Bundle) 之间。

    因此,您应该将所有与图形元素无关的初始化移至onStart()。例如:

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

    希望这会有所帮助。

    对不起我的英语。

    【讨论】:

    • 谢谢我的朋友,只有我添加 super.onStart() 和 onStart() 方法才能完美运行
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多