2016-06-21 12 views
0

私は自分のプロジェクトでフラグメントを使用しています。最初に私のフラグメントが作成され、次にAPIが呼び出され、フラグメントにデータがロードされます。ここで私は任意のアイテムをクリックしたときに私は別のフラグメントを別のフラグメントに置き換え、別のAPIも呼び出され、フラグメント化するデータをロードします。 ここに私のために問題の状況が発生しました。 ここから戻る戻るボタンを押した。戻るボタンが押されるたびにアンドロイド・フラグメントの再ロード(onCreate)

最初に作成したものと同じリロードのフラグメントですが、次のフラグメントに進む前にデータを表示する必要があります。

どうすれば私が同じデータを得ることができますか、私は左にあるsavedInstanceStateデータを取得してください。

im私の最初のフラグメントgetCategoryメソッドはApiを呼び出し、任意のカテゴリを選択したときにデータを取得します。フラグメントを別のフラグメントに置き換えますが、同じgetCategoryメソッドを返すときは同じプロセスを最初に実行します。

フラグメントは、backpressedで再びapiメソッドを呼び出すべきではありません。前にクリックした同じカテゴリを表示する必要があります。

私の最初のフラグメント呼び出すAPI ......

public class LandingFragment extends Fragment { 
    // TODO: Rename parameter arguments, choose names that match 
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 

    // TODO: Rename and change types of parameters 
    private String mParam1; 
    private String mParam2; 

    private GridLayoutManager gridLayoutManager; 
    private static RecyclerView category_Grid; 
    private Fragment myFragment = null; 
    ProgressBar mProgressView; 
    View mLoginFormView; 
    private Category category; 
    private CategoryAdapter categoryAdapter; 
    private List<CategoryObject> rowListItem; 
    private String productId; 
    private OnFragmentInteractionListener mListener; 

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

    /** 
    * Use this factory method to create a new instance of 
    * this fragment using the provided parameters. 
     * 
     * @param param1 Parameter 1. 
    * @param param2 Parameter 2. 
    * @return A new instance of fragment LandingFragment. 
    */ 
    // TODO: Rename and change types and number of parameters 
    public static LandingFragment newInstance(String param1, String param2) { 
     LandingFragment fragment = new LandingFragment(); 
     Bundle args = new Bundle(); 
     args.putString(ARG_PARAM1, param1); 
     args.putString(ARG_PARAM2, param2); 
     fragment.setArguments(args); 
     return fragment; 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (getArguments() != null) { 
      mParam1 = getArguments().getString(ARG_PARAM1); 
      mParam2 = getArguments().getString(ARG_PARAM2); 
     } 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v= inflater.inflate(R.layout.fragment_landing, container, false); 
     return v; 
    } 

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

     initViews(view); 
     RecyclerViewListeners(); 
    } 

    // TODO: Rename method, update argument and hook method into UI event 
    public void onButtonPressed(Uri uri) { 
     if (mListener != null) { 
      mListener.onFragmentInteraction(uri); 
     } 
    } 

    @Override 
    public void onAttach(Activity context) { 
     super.onAttach(context); 

     if (context instanceof OnFragmentInteractionListener) { 
      mListener = (OnFragmentInteractionListener) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 
    } 

    @Override 
    public void onDetach() { 
     super.onDetach(); 
     mListener = null; 
    } 

    /** 
     * This interface must be implemented by activities that contain this 
     * fragment to allow an interaction in this fragment to be communicated 
    * to the activity and potentially other fragments contained in that 
    * activity. 
    * <p/> 
    * See the Android Training lesson <a href= 
    *  "http://developer.android.com/training/basics/fragments/communicating.html" 
    * >Communicating with Other Fragments</a> for more information. 
    */ 
    public interface OnFragmentInteractionListener { 
     // TODO: Update argument type and name 
     void onFragmentInteraction(Uri uri); 
    } 

    private void initViews(final View v) { 
     mLoginFormView = (View)v.findViewById(R.id.mainView); 
     mProgressView = (ProgressBar)v.findViewById(R.id.login_progress); 
     category_Grid = (RecyclerView)v.findViewById(R.id.cat_grid); 
     category_Grid.setHasFixedSize(true); 
     gridLayoutManager = new GridLayoutManager(getActivity(), 3); 
     category_Grid.setLayoutManager(gridLayoutManager); 
    } 

private void RecyclerViewListeners(){ 
    category_Grid.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), category_Grid, new ItemClickListener(){ 
     @Override 
     public void onClick(View view, int position) { 

      String entityId = rowListItem.get(position).getCategoryId(); 
      String catName = rowListItem.get(position).getName(); 
      Integer ishave = rowListItem.get(position).getIshaveSubcategories(); 
      if(ishave==1) { 
       myFragment = SubcategoryFragment.newInstance(""+catName, "" + entityId); 
       ActivityUtils.launchFragementWithAnimation(myFragment, getActivity()); 
      }else{ 
       myFragment = ProductListFragment.newInstance("", "" + entityId); 
       ActivityUtils.launchFragementWithAnimation(myFragment, getActivity()); 
      } 
     } 

     @Override 
     public void onLongClick(View view, int position) { 

     } 
    })); 
} 

public void getCategory() { 
    showProgress(true); 
    String URL = getResources().getString(R.string.category_api); 
    StringRequest req = new StringRequest(Request.Method.POST,URL, new Response.Listener<String>() { 
     @Override 
     public void onResponse(String response) { 
      VolleyLog.v("Response:%n %s", response); 
      Gson gson = new GsonBuilder().serializeNulls().create(); 
      try { 
       JSONObject jsonObject = new JSONObject(response); 
       if (jsonObject.getString("status").equals(getResources().getString(R.string.response_success))){ 
        category = gson.fromJson(response, Category.class); 
        rowListItem = category.getCategory(); 
        if(navigationUpdated){ 
         someEventListener.someEvent(rowListItem); 
         navigationUpdated = false; 
        } 
        Log.d("CATEGORYID::::::::",""+rowListItem.get(1).getCategoryId()); 
        categoryAdapter = new CategoryAdapter(getActivity(),rowListItem); 
        category_Grid.setAdapter(categoryAdapter); 
        categoryAdapter.notifyDataSetChanged(); 


        return; 
       } 
       else if (jsonObject.getString("status").equals(getResources().getString(R.string.login_Er_respose))){ 
        Log.e("","ERRORRRRRR"); 
        return; 
       } 
      } catch (JSONException e) { 
       showProgress(false); 
       Log.e("My App", "Could not parse malformed JSON: \"" + response + "\""); 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
       showProgress(false); 
       VolleyLog.e("Error: ", error.getMessage()); 
     } 
    }){ 
     @Override 
     protected Map<String,String> getParams(){ 
      Map<String,String> params = new HashMap<String, String>(); 
      return params; 
     } 

     @Override 
     public Map<String, String> getHeaders() throws AuthFailureError { 
      Map<String,String> params = new HashMap<String, String>(); 
      params.put("Content-Type","application/x-www-form-urlencoded"); 
      return params; 
     } 
    }; 
    AppController.getInstance().addToRequestQueue(req); 
} 

    @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
    private void showProgress(final boolean show) { 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
     int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); 

     mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); 
     mLoginFormView.animate().setDuration(shortAnimTime).alpha(
       show ? 0 : 1).setListener(new AnimatorListenerAdapter() { 
      @Override 
      public void onAnimationEnd(Animator animation) { 
       mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); 
      } 
     }); 

     mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); 
     mProgressView.animate().setDuration(shortAnimTime).alpha(
       show ? 1 : 0).setListener(new AnimatorListenerAdapter() { 
      @Override 
      public void onAnimationEnd(Animator animation) { 
       mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); 
      } 
     }); 
    } else { 

     mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); 
     mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); 
    } 
} 

答えて

2

それのサイズが0その後、それ以外からデータをロードし、のgetCategory()サービスを呼び出している場合は、)(あなたのrowListItem.sizeを確認することができますあなたのrowListItemは....ここで私はそれが空でない場合のArrayListからデータをロードするために使用していますサンプルコード......

if (mArrayArticle.size() == 0) { 
         isDataLoading = true; 
         mRecyclerList.setVisibility(View.INVISIBLE); 
         getCategory(); 
        } else { 
         mHomeItemAdapter = new HomeItemAdapter(getActivity(), mArrayArticle, this); 
         mRecyclerList.setAdapter(mHomeItemAdapter); 
        } 
ここ

mArrayArticleがある、それはあなたを助けることを願って、私のArrayListです。 ....

私は私の好きな条件を確認

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

     //here you can check null condition for rowListItem 
    } 
} 

onActivityCreatedメソッドの内部フラグメントでoverrideこの方法

フラグメントbackpressedコールonActivityCreatedメソッドので、最初@Bhvk_AndroidBeeソリューションを実装する方法.. に伝えたい、より明確にするため

+0

この短いと甘い答えのための@Bhvk_AndroidBee、私は前に非常に混乱していた – Dinesh

+0

私は自分自身でこれを把握できなかったどのような手がかりがない – user2875404

0

その

@Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     if(rowListItem!=null){ 

      categoryAdapter = new CategoryAdapter(getActivity(),rowListItem); 
      category_Grid.setAdapter(categoryAdapter); 
      categoryAdapter.notifyDataSetChanged(); 

     }else { 

     //call the method for first time creating your view 

      getCategory(); 

     } 
    } 

これは私のようなより多くの苦労者のために役立つことを望む...

関連する問題