2015-02-24 4 views
0

У меня есть ListView внутри фрагмента. Когда я нажимаю элемент в списке, я хочу «запустить» новый фрагмент, используя replace. Это результат. Я должен был получить только КНОПКА:Замена фрагмента из фрагмента приводит к перекрытию содержимого фрагментов

enter image description here

Это внутри onItemClick:

Fragment nextFrag= new VitaminFragment(); 
FragmentTransaction transaction = this.getFragmentManager().beginTransaction(); 

transaction.replace(vitamin_fragment.getId(), nextFrag); 
transaction.addToBackStack(null); 
transaction.commit(); 

Внутри VitaminFragment в onCreateView:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    Log.d("created", "vitamin_fragment_2"); 
    return inflater.inflate(R.layout.supplement_properties_layout, container, false); 
} 

и Vitami nFragment XML (supplement_properties_layout)

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ll" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    > 
    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="New Button" 
     android:id="@+id/button2" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="77dp" /> 

    <com.astuetz.PagerSlidingTabStrip 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_alignParentBottom="true" 
     android:layout_height="48dip" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/supplements_properties_pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_above="@id/tabs" /> 

</RelativeLayout> 

макет VitaminWiki в создании программно:

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

     final View result = initComponents(); 
     ..... 
     ..... 
} 


    private RelativeLayout initComponents() { 

     vitamin_fragment = new RelativeLayout(getActivity()); 
     vitamin_fragment.setId(View.generateViewId()); 
     RelativeLayout.LayoutParams layout_57 = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 

     vitamin_fragment.setLayoutParams(layout_57); 

     ListView listView = new ListView(getActivity()); 
     ...... 
     vitamin_fragment.addView(listView); 

     com.astuetz.PagerSlidingTabStrip p = new PagerSlidingTabStrip(getActivity()); 
     ........... 
     p.setLayoutParams(params); 
     vitamin_fragment.addView(p); 

     ViewPager viewPager = new ViewPager(getActivity()); 
     ......... 
     vitamin_fragment.addView(viewPager); 

     return vitamin_fragment; 
    } 

Наконец HERE является активность, присоединенные фрагменты.

ответ

8

Метод replace() из FragmentTransaction просто удаляет весь фрагмент из указанного контейнера, а затем вызывает add(). Поэтому, если указанный контейнер пуст, replace() просто добавляет фрагмент поверх текущего представления.

Вы должны опубликовать XML-файл для вашего витамина Фрагмента, но я бы сказал, добавьте фон в свой витаминфрагмент, и все должно быть в порядке.

И не забудьте сделать основной макет вашего фрагмента кликабельным. В противном случае любой щелчок по чему-то другому, кроме кнопки, будет проходить через фрагмент и, возможно, щелкните элемент в ListView.

Ваш фрагмент должен выглядеть следующим образом:

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/white" 
    android:clickable="true" > 

EDIT: Если вы хотите заменить() метод работы и фактически удалить ListView из деятельности, убедитесь, что вы называете его на том же контейнере, вы использовали, чтобы добавить первый фрагмент в первую очередь. Кроме того, первый фрагмент необходимо добавить динамически. Когда я говорю добавить динамически, я имею в виду использование метода FragmentTransaction.add().

+0

Витамин Фрагмент не имеет XML. Он создан программно ... – Manos

+0

Я не понимаю. Какой из них - новый фрагмент, который вы хотите добавить поверх ListView? Причина, по которой код, который вы отправили, по-видимому, относится к фрагменту с ListView в нем, и я не вижу ни одной кнопки. Поэтому я не уверен, что смотрю на правильную вещь. – JDenais

+0

VitaminFragment Я хочу добавить сверху списка. Проверьте мое редактирование – Manos

Смежные вопросы