Я приведу пример переключения между двумя макетами во фрагментах:
Сначала объявите макет с двумя фрагментами: (это зависит от того, сколько фрагментов вы хотите в своем макете)
gment_layout_example.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment
android:id="@+id/Fragment2"
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
class="com.example.SecondFragment" >
<!-- Preview: layout=@layout/details -->
</fragment>
</LinearLayout>
Над макетом будут отображаться два фрагмента Fragment1 и Fragment2.Для Fragment1 я объявил контейнер, так как содержимое контейнера будет изменяться во время выполнения.Так что не объявлен класс Fragment
здесь.подробнее об этой проверке
http://developer.android.com/training/basics/fragments/fragment-ui.html
Затем создайте класс FragmentExampleActivity, который расширяет Activity
.Если вы используете Фрагмент в режиме обратной совместимости, тогда расширьте FragmentActivity
public class FragmentExampleActivity extends FragmentActivity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_layout_example);
// Check that the activity is using the layout version with
// the fragment_container FrameLayout
if (findViewById(R.id.fragment_container) != null) {
// However, if we're being restored from a previous state,
// then we don't need to do anything and should return or else
// we could end up with overlapping fragments.
if (savedInstanceState != null) {
return;
}
// Create an instance of Fragment1
Fragment1 firstFragment = new Fragment1();
// In case this activity was started with special instructions from an Intent,
// pass the Intent's extras to the fragment as arguments
firstFragment.setArguments(getIntent().getExtras());
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment).commit();
}
}
}
. Чтобы создать макет для двух фрагментов, создайте два класса, расширяющих Fragment
public class Fagment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//set the layout you want to display in First Fragment
View view = inflater.inflate(R.layout.fragment1,
container, false);
return view;
}
}
Таким же образомсоздайте класс Fragment для второго Fragment и установите макет
Теперь. Если вы хотите переключить макет фрагмента в Fragment1 на другой макет одним нажатием кнопки, то создайте другой класс, скажем, Fragment3.java, и установите макет, который вы хотитепереключитесь и напишите приведенный ниже код внутри Fragment1.java
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Button showFragment3=(Button)getView().findViewById(R.id.Button1);
showFragment3.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
Fragment3 fragment3 = new Fragment3();
fragmentTransaction.replace(R.id.Fragment1, fragment3);
//provide the fragment ID of your first fragment which you have given in
//fragment_layout_example.xml file in place of first argument
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
});
}
Теперь, чтобы вернуться снова к первому фрагменту, вы можете нажать на кнопку назад.Но если вы хотите вернуться по нажатию кнопки, напишите следующий код в Fragment3.java
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Button showFragment1 = (Button) getView().findViewById(
R.id.Button2);
showFragment1 .setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
getFragmentManager().popBackStack();
}
});
}
Спасибо!Надеюсь, это поможет вам ...