0

뒷쪽 조각에서 조각을 가져 오려고합니다. 그것은 검색되고 있지만 문제는 다시 버튼을 누르면 현재 조각의보기 및 후속 lifecyce 메서드가 호출되고 받고 있다는 것입니다. 여기에 가기 backstack에 조각을 넣어 내 코드입니다 : 여기 왜 돌아 오는 버튼을 누르면 현재 조각의 oncreateview가 호출됩니까?

fragment=new FileTrackingFragment(); 
bundle=new Bundle(); 
bundle.putString("name","Dak Monitoring"); 
bundle.putInt("num",2); 
fragment.setArguments(bundle); 
ft.replace(R.id.parent, fragment, fragment.getClass().getName()); 
ft.addToBackStack(fragment.getClass().getName()); 
ft.commit(); 
break; 

이 조각의 코드입니다 :

package com.example.rajvirsingh.epunjaboffice.DakMonitoring; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.design.widget.Snackbar; 
import android.support.percent.PercentRelativeLayout; 
import android.support.v4.app.Fragment; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.example.rajvirsingh.epunjaboffice.FileTracking.HistoryAdapter; 
import com.example.rajvirsingh.epunjaboffice.MainActivity; 
import com.example.rajvirsingh.epunjaboffice.R; 
import com.example.rajvirsingh.epunjaboffice.Utility.Constants; 
import com.example.rajvirsingh.epunjaboffice.Utility.SessionManager; 
import com.loopj.android.http.AsyncHttpClient; 
import com.loopj.android.http.RequestParams; 
import com.loopj.android.http.TextHttpResponseHandler; 

import org.json.JSONArray; 

import java.util.ArrayList; 

import cz.msebera.android.httpclient.Header; 

/** 
* Created by rajvirsingh on 07/03/17. 
*/ 

public class ConsolidatedReportFragment extends Fragment implements AdapterView.OnItemSelectedListener { 
    SessionManager sessionManager; 
    JSONArray consolidatedRJsonArray; 
    String userCode,branchCode; 
    MainActivity mainActivity; 
    Spinner spinDuration; 
    String selectedDuration=""; 
    ProgressDialog pDialog; 
    TextView error,serial; 
    PercentRelativeLayout pl; 
    PercentRelativeLayout ll; 
    RecyclerView recyclerView; 
    AsyncHttpClient client = new AsyncHttpClient(); 
    String []durationValues={"This Week","This Month","This Year","Total"}; 


    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_dak_monitoring_consolidated,container,false); 
    } 


    @Override 
    public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    sessionManager=SessionManager.NewInstance(activity); 
    userCode=sessionManager.pref.getString("usercode",""); 
    branchCode=sessionManager.pref.getString("branchcode",""); 
    mainActivity=(MainActivity) getActivity(); 
    if(((AppCompatActivity) getActivity()).getSupportActionBar()!=null) { 
     ((AppCompatActivity) getActivity()).getSupportActionBar().show(); 
     mainActivity.setToolbarTitle("Consolidated Report"); 
     mainActivity.unlockDrawer(); 
     mainActivity.loadNavigationMenu(R.menu.menu_dak_monitoring); 
    } 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    pDialog = new ProgressDialog(getActivity(),R.style.DialogStyle); 
    pDialog.setMessage("Loading..."); 
    pDialog.setTitle("Office Management"); 
    pDialog.setIndeterminate(true); 
    pDialog.setCancelable(true); 

    sessionManager=SessionManager.NewInstance(getActivity()); 

    error=(TextView)view.findViewById(R.id.err); 
    serial=(TextView)view.findViewById(R.id.serial); 


    spinDuration=(Spinner)view.findViewById(R.id.spin_duration); 
    ArrayAdapter<String> arrayAdapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_spinner_item,durationValues); 
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinDuration.setAdapter(arrayAdapter); 
    spinDuration.setOnItemSelectedListener(this); 
    spinDuration.setSelection(0); 
    selectedDuration="1"; 

    pl=(PercentRelativeLayout)view.findViewById(R.id.percentile); 

    ll=(PercentRelativeLayout) view.findViewById(R.id.ll1); 
    recyclerView=(RecyclerView)view.findViewById(R.id.recyclerView); 

    if(Constants.isOnline(getActivity())) 
    { 

     getConsolidatedReport(); 
    } 
    } 

    void getConsolidatedReport() 
    { 
    RequestParams params = new RequestParams(); 
    params.put("_userMasterCode",userCode); 
    params.put("_parameter", selectedDuration); 
    String url=getString(R.string.urlGetConsolidatedMonitoringReport); 

    client.get(url, params, new TextHttpResponseHandler() { 
     @Override 
     public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { 
     pDialog.dismiss(); 
     ll.setVisibility(View.GONE); 
     recyclerView.setVisibility(View.GONE); 
     error.setVisibility(View.VISIBLE); 
     if(getView()!=null) 
      Snackbar.make(getView(), "Error!", Snackbar.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onSuccess(int statusCode, Header[] headers, String responseString) { 

     try { 
      pDialog.dismiss(); 
      int p1 = responseString.indexOf(">"); 
      int p2 = responseString.lastIndexOf("<"); 
      String r = responseString.substring(p1 + 1, p2); 
      p1 = r.indexOf(">"); 
      r = r.substring(p1 + 1, r.length()); 
      ll.setVisibility(View.VISIBLE); 
      recyclerView.setVisibility(View.VISIBLE); 
      error.setVisibility(View.GONE); 
      consolidatedRJsonArray = new JSONArray(r); 
      ConsolidatedReportAdapter consolidatedReportAdapter=new ConsolidatedReportAdapter(consolidatedRJsonArray,getActivity()); 
      recyclerView.setAdapter(consolidatedReportAdapter); 
      recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 
     } catch (Exception e) { 
      if (getActivity() != null && isAdded()) { 
      ll.setVisibility(View.GONE); 
      recyclerView.setVisibility(View.GONE); 
      error.setVisibility(View.VISIBLE); 
      if(getView()!=null) 
       Snackbar.make(getView(), "No Information Exist! For Selection", Snackbar.LENGTH_LONG).show(); 
      else 
       Toast.makeText(getActivity(),"No Information Exist! For Selection",Toast.LENGTH_LONG).show(); 
      pDialog.dismiss(); 
      } 
     } 
     } 
    }); 
    } 

    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    switch (parent.getId()) 
    { 
     case R.id.spin_duration: 
     selectedDuration=String.valueOf(position+1); 
     getConsolidatedReport(); 
     break; 
    } 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parent) { 

    } 

    @Override 
    public void onPause() { 
    super.onPause(); 
    pDialog.dismiss(); 
    } 

    @Override 
    public void onStop() { 
    client.cancelAllRequests(true); 
    super.onStop(); 
    } 

} 

답변

0
당신의보기를 파괴 당신이 다음 조각으로 이동할 때 전화를 갈 것

그래서 다시 버튼을 눌렀을 때 다시보기를 요구할 것이고 그것은 메모리에 조각보기 (현재 보이지 않음)를 유지하면 나중에 메모리 문제가 발생할 것이므로 접근법이어야합니다. 그것은 다시 호출하지 않을 onCreate() 메서드입니다.

당신이 다음 조각 스택 동작합니다이 here을 참조하십시오 방법에 대한 자세한 내용은 ft.add(R.id.parent, fragment, fragment.getClass().getName());

을 사용하여 다시 눌러에 onCreateView 전화를하지 않으려면

.

+0

문제는 내가 현재 현재보고있는 현재보기의 oncreateview가 호출되는 것입니다. 나는 내가 돌아갈 전망에 대해 말하는 것이 아니다. –

+0

onCreateView가 backpress에서 전화를 받고있는 현재 보이는 조각의 전체 코드를 제공 할 수 있습니까? – Avi

+0

좋아요. 질문을 편집 중입니다. –