2014-10-21 1 views
0

https://github.com/ManuelPeinado/FadingActionBar Я использую эту библиотеку для реализации панели действия замирания в моем фрагменте (начинается с ящика навигации [Главная активность] и при щелчке по одному элементу в навигационном ящике открывается основное содержимое. Фрагмент списка [Фрагмент 1] и при нажатии на любой элемент в списке открывается другой фрагмент, который отображает детали [Фрагмент 2]).java.lang.IllegalStateException: указанный ребенок уже имеет родителя Только при использовании библиотеки FadingActionBar?

я нажимаю на пункт на навигационном ящик, а затем в 1-осколочной мыши на любом элементе списка, а затем открыть 2-го frag.Now Мои приложения аварии, когда я нажимаю кнопку назад, когда на ошибки второго Fragment.with

java.lang.IllegalStateException: The specified child already has a parent.You must call removeView() on the child's parent first. 

, если в 1-м фрагменте я использую в onCreateView

return inflater.inflate(R.layout.myxml,container,false); 

Он не откажет
НО, если я использую (ниже в OncreateView вместе с onAttach), как я должен реализовать fadingActionbarlibrary: он выходит из строя.

oncreateView(....){ 
super... 
view = mFadingHelper.createView(inflater); 
return view; 
} 

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


    mFadingHelper = new FadingActionBarHelper() 
      .actionBarBackground(R.drawable.ab_background) 
      .headerLayout(R.layout.header_light) 
      .contentLayout(R.layout.list_main_all) 

      .lightActionBar(true); 
    mFadingHelper.initActionBar(activity); 
} 

1-й FTRAG

 import java.util.List; 

     import android.app.Activity; 
     import android.os.Bundle; 
     import android.support.v4.app.FragmentManager.OnBackStackChangedListener; 
     import android.support.v4.app.ListFragment; 
     import android.view.InflateException; 
     import android.view.LayoutInflater; 
     import android.view.View; 
     import android.view.ViewGroup; 
     import android.widget.ListView; 

     import com.manuelpeinado.fadingactionbar.FadingActionBarHelper; 

     public class CommunityFragment extends ListFragment { 
      View view; 
      private FadingActionBarHelper mFadingHelper; 
      List<list_object> lite = new FlowerData().getFlowers(); 

      public CommunityFragment() { 
      } 

      @Override 
      public void onCreate(Bundle savedInstanceState) { 
       // TODO Auto-generated method stub 
       super.onCreate(savedInstanceState); 

       list_all_main_adapter adap = new list_all_main_adapter(getActivity(), 
         R.layout.list_view_custom_all, lite); 
       setListAdapter(adap); 

      } 

      @Override 
      public void onListItemClick(ListView l, View v, int position, long id) { 
       // TODO Auto-generated method stub 
       super.onListItemClick(l, v, position, id); 
       list_click fragment = null; 

       switch (position) { 
        case 0: 

         getFragmentManager().beginTransaction() 
           .replace(getId(), new list_click(position), "Passing and replacing") 
           .addToBackStack(null).commit(); 
     //    getFragmentManager().beginTransaction().remove(new CommunityFragment()).commit(); 
         break; 
        case 1: 
         getFragmentManager().beginTransaction() 
           .replace(getId(), new list_click(position), "Passing and replacing") 
           .addToBackStack(null) 
           .commit(); 
         break; 
        case 2: 
         getFragmentManager().beginTransaction() 
           .replace(getId(), new list_click(position), "Passing and replacing") 
           .commit(); 

         break; 

        default: 
         break; 
       } 

      } 

      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 

       view = mFadingHelper.createView(inflater); 


       return view; 
      } 


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


       mFadingHelper = new FadingActionBarHelper() 
         .actionBarBackground(R.drawable.ab_background) 
         .headerLayout(R.layout.header_light) 
         .contentLayout(R.layout.list_main_all) 

         .lightActionBar(true); 
       mFadingHelper.initActionBar(activity); 
      } 

     } 

второй фрагмент

  import android.app.ActionBar; 
      import android.app.Activity; 
      import android.os.Bundle; 
      import android.support.v4.app.Fragment; 
      import android.support.v4.app.FragmentManager.OnBackStackChangedListener; 
      import android.view.LayoutInflater; 
      import android.view.View; 
      import android.view.ViewGroup; 
      import android.widget.TextView; 

      import com.manuelpeinado.fadingactionbar.FadingActionBarHelper; 

      public class list_click extends Fragment { 
       public static int pos = 0; 
       View v; 

       public list_click() { 

       } 

       public list_click(int p) { 
        pos = p; 

       } 

       @Override 
       public View onCreateView(LayoutInflater inflater, ViewGroup container, 
             Bundle savedInstanceState) { 


        v = inflater.inflate(R.layout.onlist_clik, container, false); 
        TextView tv = (TextView) v.findViewById(R.id.textView3); 
        tv.setText("Position " + pos); 

        return v; 
       } 


      } 

Спасибо.

+0

вы можете вставить другой код этого файла ... а также logcat, чтобы узнать, где именно проблема .. – Toppers

+0

Я разместил его, в 1-м фрагменте я менял oncreateView и добавлял метод onAttach – nikhilvit

+0

любой, мог кто-нибудь видит проблему? – nikhilvit

ответ

1

я столкнулся с таким же вопросом и нашел следующий обходной путь:

Я думаю, что это дурак доказательство способ избежать повторного раздувания корневого зрения фрагмента:

private WeakReference<View> mRootView; 
private LayoutInflater mInflater; 

/** 
* inflate the fragment layout , or use a previous one if already stored <br/> 
* WARNING: do not use in any function other than onCreateView 
* */ 
private View inflateRootView() { 
    View rootView = mRootView == null ? null : mRootView.get(); 
    if (rootView != null) { 
     final ViewParent parent = rootView.getParent(); 
     if (parent != null && parent instanceof ViewGroup) 
      ((ViewGroup) parent).removeView(rootView); 
     return rootView; 
    } 
    rootView = mFadingHelper.createView(mInflater); 
    mRootView = new WeakReference<View>(rootView); 
    return rootView; 
} 


@Override 
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { 
    mInflater=inflater!=null?inflater:LayoutInflater.from(getActivity()); 
    final View view = inflateRootView(); 
    ... //update your data on the views if needed 
} 

, если ваша проблема действительно решена, пожалуйста, не забывайте, что стрелка вписывается в стрелку, которая описывает, что решение предоставлено, показывает исследовательские усилия; это полезно и понятно.