Intereting Posts
Как перенести одну из моих Android-приложений на другую учетную запись разработчика Android (не мой) Лучшая практика для компоновки двух текстовых изображений в строке Ошибка сборки сборки модуля Android Studio HttpClient отсутствует в переносном подмножестве .Net при создании PCL в Xamarin Прикрепите пользовательскую метрику к HitBuilders.TransactionBuilder в Android Analytics v4 SplashScreen с использованием PNG-изображения приводит к Android.Views.InflateException, за которым следует OutOfMemory Добавить PhoneStateListener Текущий API Google Spreadsheet Пример написания Использование пользовательского хранилища отладки для сообщества intellij-idea сообщества не работает Как я могу записать голос и записать Call в Android? Как проверить, включена ли служба определения местоположения wifi …? Кнопка входа в Facebook не работает при нажатии Обновить меню NavigationView после изменения языка Как «выкинуть новый ZygoteInit.MethodAndArgsCaller» очистить фреймы стека? Невозможно переопределить метод startElement

Android заменит текущий фрагмент другим фрагментом

Я только начал с разработки фрагментов для HoneyComb. Я создал два фрагмента. Когда я нажимаю кнопку в левом фрагменте, в правой части создается новый фрагмент. Между тем, когда я нажимаю кнопку в правом фрагменте (т. Е. DetialsFragment в моем коде ниже должен быть заменен другим фрагментом. Main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <fragment class="com.fragment.example.Titles" android:id="@+id/titles" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> <FrameLayout android:id="@+id/details" android:layout_weight="1" android:layout_width="0px" android:layout_height="match_parent" /> </LinearLayout> 

FragmentExample.java

 public class FragmentExample extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } 

Titles.java

 public class Titles extends Fragment { public FragmentTransaction ft; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.main1, null); Button button1 = (Button)v.findViewById(R.id.button1); button1.setText("santhosh"); button1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub DetailsFragment details = (DetailsFragment) getFragmentManager().findFragmentById(R.id.details); if (details == null || details.getShownIndex() != 1) { // Make new fragment to show this selection. details = DetailsFragment.newInstance(1); // Execute a transaction, replacing any existing // fragment with this one inside the frame. ft = getFragmentManager().beginTransaction(); ft.add(R.id.details, details, "detail"); ft.setTransition( FragmentTransaction.TRANSIT_FRAGMENT_FADE); ft.commit(); } } }); return v; } } 

DetailsFragment.java

 public class DetailsFragment extends Fragment { /** * Create a new instance of DetailsFragment, initialized to * show the text at 'index'. */ Titles title = new Titles(); String[] titles = {"Title1", "Title2", "Title3", "Title4"}; public static DetailsFragment newInstance(int index) { DetailsFragment f = new DetailsFragment(); // Supply index input as an argument. Bundle args = new Bundle(); args.putInt("index", index); f.setArguments(args); return f; } public int getShownIndex() { return getArguments().getInt("index", 0); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { // Currently in a layout without a container, so no // reason to create our view. return null; } Button button = new Button(getActivity()); button.setText("Next"); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } }); return button; } } 

Затем, когда ваша кнопка отображается, и событие клика увольняется, вы можете вызвать следующее в событии click:

 final FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.details, new NewFragmentToReplace(), "NewFragmentTag"); ft.commit(); 

И если вы хотите вернуться к DetailsFragment при нажатии, убедитесь, что вы добавили вышеперечисленную транзакцию в задний стек, то есть

 ft.addToBackStack(null); 

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

Используйте android.support.v4.app для FragmentManager & FragmentTransaction в своем коде, это сработало для меня.

 DetailsFragment detailsFragment = new DetailsFragment(); android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager(); android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.details,detailsFragment); fragmentTransaction.commit(); 

Вы можете попробовать под кодом. Это очень простой способ вывести новый фрагмент из старого фрагмента.

 private int mContainerId; private FragmentTransaction fragmentTransaction; private FragmentManager fragmentManager; private final static String TAG = "DashBoardActivity"; public void replaceFragment(Fragment fragment, String TAG) { try { fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(mContainerId, fragment, tag); fragmentTransaction.addToBackStack(tag); fragmentTransaction.commitAllowingStateLoss(); } catch (Exception e) { // TODO: handle exception } }