2016-10-18 1 views
1

データをクリックするたびにデータをロードするフラグメントがあります。その動作をクリックして別のフラグメントに移動すると、それはデータをリロードせず、 "ローディングスピナー"を表示しません。それ、どうやったら出来るの?これは私のフラグメントのコードです:フラグメントの一度だけサービスからデータをロードする

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

}

+0

onSaveInstanceState(Bundle outState)をオーバーライドしてデータをバンドルに保存し、そこから取得します。 – Developer

+0

arraylistを 'onSaveInstanceState(Bundle outState)'メソッドに格納することも、フラグメント化時にデータベースからデータをロードしてロードすることもできます2回目のロード。また、リロードフラグメントを防ぐには、フラグメントトランザクションのために '.replace()'の代わりに '.add()'メソッドを使用してください。 – Piyush

+0

フラグメントを処理するためにビューページャーを使用していますか? –

答えて

0

onCreateViewからサーバーからの結果を得ているあなたのメソッドを削除します。フラグメントを置き換えるときは常にonCreateViewが呼び出されます。代わりに、onCreateで一度作業してください。

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

フラグメントから離れて@rahulを再び開くと、スピナーが表示されます。 – Fuluza

+0

Move setUpDialog(); in onCreate – Rahul

+0

それでも@rahulは役に立ちません – Fuluza

関連する問題