在片段上仅从服务加载数据一次 [英] Load data from service only once on fragment

查看:76
本文介绍了在片段上仅从服务加载数据一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个片段,每次单击它都会加载数据,我希望它的行为是这样的:如果我单击它一次并在回到它上时移到另一个片段,它不会重新加载数据并且不再显示正在加载微调器".我怎么做?这是我的片段代码:

I have a fragment that loads data everytime you click on it, I want its behavior to be in a way that if I clicked on it once and moved to another fragment when I go back to it, it does not reload the data and it does not show the "Loading spinner" anymore. How do I do that? This is my fragment code:

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

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);//Make sure you have this line of code.
    setRetainInstance(true);
}

@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
                         Bundle savedInstanceState) {
    View consultantView = inflater.inflate(R.layout.fragment_consultant, container, false);
    //consultantList = new ArrayList<>();
    //consultantLisView = (ListView) consultantView.findViewById(R.id.consultant_listview);
    swipeRefreshLayout = (SwipeRefreshLayout) consultantView.findViewById(R.id.consultant_list_swipe_refresh);

    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            swipeRefreshLayout.setRefreshing(false);
            retrieveConsultantList();    
            consultantRecyclerView.setAdapter(consultantRecylerViewAdapter);
        }
    });

    consultantRecyclerView = (RecyclerView) consultantView.findViewById(R.id.consultant_recyclerview);
    setUpDialog();

    FloatingActionButton createConsultantFab = (FloatingActionButton) consultantView.findViewById(R.id.add_consultant);
    createConsultantFab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent createConsultantIntent = new Intent(getContext(), CreateConsultantActivity.class);
            startActivity(createConsultantIntent);

        }

    });

    ((AppCompatActivity) getActivity()).getSupportActionBar().setTitle(R.string.consultant_list_title);

    retrieveConsultantList();

    return consultantView;
}

public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // inflater.inflate(R.menu.main, menu);
    super.onCreateOptionsMenu(menu, inflater);


    searchMenuItem = menu.findItem(R.id.action_search);
    searchView = (SearchView) searchMenuItem.getActionView();
    searchView.setSubmitButtonEnabled(true);
    searchView.setOnQueryTextListener(this);
    /// searchView.setSubmitButtonEnabled(true);
    searchView.setOnQueryTextListener(this);
}

@Override
public boolean onQueryTextSubmit(String query) {
    return false;
}

@Override
public boolean onQueryTextChange(String newText) {

    consultantRecylerViewAdapter.getFilter().filter(newText);
    consultantRecylerViewAdapter.notifyDataSetChanged();
    return false;
}

private void setUpConsultantRecyclerView(List<Consultant> consultantList) {


    consultantRecylerViewAdapter = new ConsultantRecylerViewAdapter(getContext(), consultantList);
    consultantRecyclerView.setAdapter(consultantRecylerViewAdapter);

    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
    linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
    consultantRecyclerView.setLayoutManager(linearLayoutManager);

    consultantRecyclerView.setItemAnimator(new DefaultItemAnimator());
}

public void setUpDialog() {
    consultantListLoadingDialog = ProgressDialog.show(getContext(),
            "Loading consultant",
            "Please wait");
}

private void retrieveConsultantList() {
    final StringRequest consultantStringRequest = new StringRequest(Request.Method.GET,
            Constants.BASE_URL.concat(Constants.CONSULTANT_KEY_WORD),
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    //eventList =  new ArrayList<>();
                    JsonDataParser parseJSON = new JsonDataParser();
                    setUpConsultantRecyclerView(parseJSON.jsonArrayToConsultantList(response));
                    consultantListLoadingDialog.dismiss();
                    //consultantListAdapter.addAll();
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {

               }
         });
    VolleyRequestQueue.getInstance(getContext()).addToRequestQueue(consultantStringRequest);
}

}

推荐答案

删除从onCreateView从服务器获取结果的方法.替换片段时,始终会调用onCreateView.而是一次在onCreate中工作.

Remove your method which is getting results from the server from onCreateView. onCreateView called all time when you replace fragments. Instead do one time work in onCreate.

@Override
public void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstance);
   retrieveConsultantList();
}

这篇关于在片段上仅从服务加载数据一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆