2017-07-12 18 views
0

私は2つのフラグメントを1つのアクティビティに持っています。 categoryFragment.javaで選択されたカテゴリに基づいて、サブカテゴリは別のフラグメント(SubcategoryFragment.java)に表示されますonフラグメントを1つにして、同じホストアクティビティで別のフラグメントのtextviewを変更してください。

現在、categoryfragmentでtextviewをクリックすると、サブカテゴリが表示されます。代わりに、テキストビューがクリックで追加されます。

私もreplcaeフラグメントを試しました。しかし、フラグメントトランザクションを2回コミットすることはできません。どこが間違っているか教えてください。

MainActivity

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main2); 

     itemsList.add(new Items(1,"Drinks","Coca Cola",10,1,"image.jpg")); 
     itemsList.add(new Items(2,"Drinks","Pepsi",30,1,"image.jpg")); 
     itemsList.add(new Items(3,"Food","Briyani",30,1,"image.jpg")); 
     itemsList.add(new Items(4,"Food","meals",30,1,"image.jpg")); 

     bundle.putParcelableArrayList("itemsList", itemsList); 
     bundle.putString("category","none"); 
     frg.setArguments(bundle); 
     frg1.setArguments(bundle); 
     transaction.add(R.id.My_Container_1_ID, frg, "Frag_Top_tag"); 
     transaction.add(R.id.My_Container_2_ID, frg1, "Frag_Middle_tag"); 
     transaction.commit(); 
    } 

    @Override 
    public void onFragmentInteraction(Integer id) { 
     String category = ""; 
     itemsList.add(new Items(1,"Drinks","Coca Cola",10,1,"image.jpg")); 
     itemsList.add(new Items(2,"Drinks","Pepsi",30,1,"image.jpg")); 
     itemsList.add(new Items(3,"Food","Briyani",30,1,"image.jpg")); 
     itemsList.add(new Items(4,"Food","meals",30,1,"image.jpg")); 
     for(int i=0; i<itemsList.size();i++) 
     { 
      if(i == itemsList.get(id).getItemId() - 1) 
       category = itemsList.get(i).getCategory(); 
     } 

     ((SubCategoryFragment)getSupportFragmentManager().findFragmentById(R.id.My_Container_2_ID)).getSelectedCategory(category); 

    } 

CategoryFragmnet.java

@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) { 

     View view; 
     view = inflater.inflate(R.layout.fragment_category, container, false); 

     Bundle bundle = this.getArguments(); 
     ArrayList<Items> myValue; 
     myValue = bundle.getParcelableArrayList("itemsList"); 

     TextView textView = (TextView) view.findViewById(hello); 
     textView.setOnClickListener(this); 

     String cat=""; 
     for(int i=0; i<myValue.size();i++) 
     { 
      cat = cat + myValue.get(i).getCategory() +" "; 
     } 
     textView.setText(cat); 
     return view; 
    } 
    OnFragmentInteractionListener dataPasser; 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof OnFragmentInteractionListener) { 
      mListener = (OnFragmentInteractionListener) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 

     dataPasser = (OnFragmentInteractionListener) context; 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) 
     { 
      case R.id.hello: 
       mListener.onFragmentInteraction(1); 
       break; 
     } 
    } 

     public interface OnFragmentInteractionListener { 
     // TODO: Update argument type and name 
     void onFragmentInteraction(Integer id); 
    } 

SubCategoryFragment.java

@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) { 
     View view; 
     view = inflater.inflate(R.layout.fragment_sub_category, container, false); 
     return view; 
    } 

    public void onViewCreated(View v, Bundle savedInstanceState) { 
     super.onViewCreated(v, savedInstanceState); 
     Bundle bundle = this.getArguments(); 
     myValue = bundle.getParcelableArrayList("itemsList"); 
     String category = bundle.getString("category"); 
     textView = (TextView) v.findViewById(R.id.subh); 
    } 

    @Override 
    public void onResume(){ 
     super.onResume(); 
    } 
    public void onButtonPressed(Uri uri) { 
     if (mListener != null) { 
      mListener.OnSubFragmentInteractionListener(uri); 
     } 
    } 

    OnSubFragmentInteractionListener dataPasser; 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     if (context instanceof OnSubFragmentInteractionListener) { 
      mListener = (OnSubFragmentInteractionListener) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 

     dataPasser = (OnSubFragmentInteractionListener) context; 
    } 

    public interface OnSubFragmentInteractionListener { 
     void OnSubFragmentInteractionListener(Uri uri); 
    } 

    public void getSelectedCategory(String str) 
    { 
     textView = (TextView) getView().findViewById(R.id.subh); 
     textView.setText(" "); 
     String cat=""; 
     for(int i=0; i<myValue.size();i++) 
     { 
      if(str.equals(myValue.get(i).getCategory())) 
       cat = cat + myValue.get(i).getSubCategory() +" "; 
     } 
     textView.setText(cat); 
    } 

答えて

0

Maybあなたは、インターフェイスを使用してフラグメント間でデータを渡そうとすることができます 最初のフラグメントMainActivityでインタフェースを作成し、それぞれのメソッドを実装してから、第2のフレマントで定義されたメソッドを呼び出します 2番目のフラグメントはそのメソッドを通じてデータを受け取ります。 2つの断片が直接粉砕できないので、この単純な方法を使用する必要があります。 これが役立つことを願っています。

+0

あるフラグメントから別のフラグメントにデータを渡すことができます。しかし、フラグメント2の私のテキストビューは置き換えられていません、それは追加されます。 –

+0

これを参考にしてみてください(https://developer.android.com/training/basics/fragments/communicating.html)。 – yoyo97

関連する問題