2013-10-05 2 views
7

Я использую два фрагмента в своей деятельности. Вначале я добавлю один фрагмент в действие. Затем, используя прослушиватель в первом фрагменте, я хочу заменить его вторым фрагментом. Я старался, по моему пониманию, но не заменяю. Он отображает оба фрагмента, перекрывающиеся.Как заменить один фрагмент на другой фрагмент с помощью прослушивателя в первом фрагменте

Here is my code: 

// MainActivity 


public class MainActivity extends Activity { 
    Fragment Fragment_one; 
    Button one; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     //one=(Button) findViewById(R.id.button1); 
     //one.setOnClickListener(new View.OnClickListener() { 

      //@Override 
      //public void onClick(View arg0) { 
       // TODO Auto-generated method stub 
       FragmentManager man=getFragmentManager(); 
       FragmentTransaction tran=man.beginTransaction(); 
       Fragment_one=new Fragment1(); 
       tran.add(R.id.fragment_container, Fragment_one);//tran. 
       tran.addToBackStack(null); 
       tran.commit(); 

      //} 
     //}); 

    } 


} 
//fragment code 

public class Fragment1 extends Fragment{ 
    Button add; 
    Fragment2 fragment_two; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     //return super.onCreateView(inflater, container, savedInstanceState); 

     View view=inflater.inflate(R.layout.fragment_1, container,false); 
     add=(Button) view.findViewById(R.id.button1); 
     fragment_two =new Fragment2(); 
     add.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       FragmentTransaction t=getActivity().getFragmentManager().beginTransaction(); 
       t.remove(new Fragment1()); 

       t.replace(R.id.fragment1, fragment_two);t.addToBackStack(null); 
    t.commit(); 
       //t.addToBackStack(null); 

      } 
     }); 


     return view; 
    } 
} 

output screen

+0

Почему бы не раздуть оба фрагмента и использовать ваш слушатель для переключения их видимости? – brbaker

+1

Можете ли вы мне помочь, как переключаться? @brbaker –

+0

1) В вашем фрагменте2 xml установите видимость в GONE; 2) на кнопке кнопки фрагмента1, findViewById (<фрагмент1view>). SetVisibility (android.view.View.GONE) и findViewById (<фрагмент2view>). SetVisibility (android.view.View.VISIBLE – brbaker

ответ

6

Пара вещей, которые я вижу в вашем коде.

t.remove(new Fragment1()); 

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

t.replace(R.id.fragment1, fragment_two) 

Это первый параметр должен быть идентификатор контейнера «R.id.fragment_container» не R.id.fragment1.

t.addToBackStack(null); 

Этот код может или не может быть необходимо на основе того, хотите ли вы, чтобы позволить пользователю нажать на кнопку «Назад», чтобы вернуться к fragment_one после того, как они прибыли в FRAGMENT2.

+0

@lo thanks. Он работает. –

1

-Почему не раздувайте оба фрагмента и не используйте ваш слушатель, чтобы переключить их видимость? - brbaker

  • Можете ли вы помочь мне, как переключать @brbaker - Езда Пещеру

добавить интерфейс и реализовать в деятельности и метода коррекции. Затем добавьте onClickListener и установите для запуска метод в интерфейсе. Затем используйте диспетчер фрагментов для выполнения show() и hide() транзакций по фрагментам по мере необходимости. .

.

http://developer.android.com/reference/android/app/FragmentTransaction.html

шоу (фрагмент фрагмент) мерцает ранее скрытый фрагмент.

hide (фрагмент фрагмента) -Скрывает существующий фрагмент.

1

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

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