Добавьте фрагмент фрагмента и извлеките его [дубликат]

Я создал очень простую библиотеку https://github.com/ravinderpayal/FooterJS

Это очень просто в использовании. После включения библиотеки просто позвоните в эту строку кода.

  footer.init (document.getElementById ("ID_OF_ELEMENT_CONTAINING_FOOTER"));   

Нижние колонтитулы могут быть динамически изменены путем вызова вышеуказанной функции с помощью другого параметра / id.

  footer.init (document.getElementById ("ID_OF_ANOTHER_ELEMENT_CONTAINING_FOOTER"));   

Примечание: - Вы не должны изменять или добавлять CSS. Библиотека динамична, что подразумевает, что даже если размер экрана будет изменен после загрузки страницы, он сбросит положение нижнего колонтитула. Я создал эту библиотеку, потому что CSS решает проблему некоторое время, но когда размер отображения значительно меняется, с рабочего стола на планшет или наоборот, они либо перекрывают содержимое, либо больше не остаются липкими.

Другое решение - это CSS Media Queries, но вам приходится вручную писать разные стили CSS для разных размеров экранов, в то время как эта библиотека выполняет свою работу автоматически и поддерживается всеми базовыми браузерами, поддерживающими JavaScript.

Редактирование решения CSS:

  @media только экран и (min-height: 768px) {/ * или высота / длина содержимого тела, включая нижний колонтитул * / / * Для мобильных телефонов: * / #footer {width: 100%;  Положение: фиксированный;  внизу: 0;  }}  

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

И это кажется лучшим решением, чем JavaScript / library.

98
задан Pratik Butani 26 November 2014 в 07:28
поделиться

9 ответов

не задает вопрос точно так же, как слишком просто:

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
fragment.<specific_function_name>(); 

Обновление: для тех, кто использует Kotlin

var fragment = supportFragmentManager.findFragmentById(R.id.frameLayoutCW) as WebViewFragment
fragment.callAboutUsActivity()
170
ответ дан Akshay 16 August 2018 в 10:45
поделиться
  • 1
    Хорошо, что было легко, спасибо (я совершенно новый для фрагментов). Теперь сложная часть состоит в том, что я не могу получить ссылку на фрагмент в первую очередь. Он не определен в XML-макете, поэтому я не могу использовать findFragmentById (). И мне не ясно, из кода, который я следую (см. Выше), как / где фрагмент даже создан. Если бы я мог просто добавить тег и использовать findFragmentByTag (). У элемента AccountListActivity этого примера есть вызов beginTransaction (). Add (), но на мой след он никогда не вызывается. Вот где я почесываю голову. Я ценю любые предложения. – gcl1 5 June 2012 в 20:28
  • 2
    Извините, я оставил ссылку. Образец кода, за которым я следую, - FragmentTabsPager . Благодарю. – gcl1 5 June 2012 в 20:48
  • 3
    Ситуация будет иной, если ни у вас нет идентификатора, ни TAG, связанных с фрагментом. – Ankur Gautam 20 January 2014 в 08:35
  • 4
    как я могу получить идентификатор фрагмента? – NarendraJi 6 October 2015 в 11:16
  • 5
    Сделав это, я оказался в ссылке на нулевой объект! – Alok Rajasukumaran 5 July 2016 в 05:02
  • 6
    – Vaclovas RekaÅ¡ius Jr. 25 August 2017 в 00:38
  • 7
  1. Если вы не используете Фрагмент библиотеки поддержки, выполните следующие действия:

((FragmentName) getFragmentManager().findFragmentById(R.id.fragment_id)).methodName();

2. Если вы используете фрейм библиотеки поддержки, выполните следующие действия:

((FragmentName) getSupportFragmentManager().findFragmentById(R.id.fragment_id)).methodName();

4
ответ дан Chintan Shah 16 August 2018 в 10:45
поделиться

Если вы используете «import android.app.Fragment;», то используйте либо:

1)

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.specific_function_name(); 

Где R.id.example_fragment, скорее всего, FrameLayout id внутри вашего xml-макета. OR

2)

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentByTag(“FragTagName”); 
fragment.specific_function_name(); 

Где FragTagName - это имя u, указанное при u:

TabHost mTabHost.newTabSpec(“FragTagName”)

Если вы используете «импорт» android.support.v4.app.Fragment; "Затем используйте либо:

1)

ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentById(R.id.example_fragment); 
fragment.specific_function_name(); 

OR

2)

ExampleFragment fragment = (ExampleFragment) getSupportFragmentManager().findFragmentByTag(“FragTagName”); 
fragment.specific_function_name(); 
70
ответ дан Gene 16 August 2018 в 10:45
поделиться
  • 1
    У меня есть CoordinatorLayout с id R.id.example_fragment, его возвращающий null. Я использую import android.support.v4.app.Fragment; что делать? – Kishore 14 March 2016 в 14:07
  • 2
    Я предлагаю вам опубликовать это как новый вопрос и включить свой пример кода. Трудно сказать источник проблемы, не видя фактического кода. – Gene 15 March 2016 в 16:38

Если вы используете библиотеку поддержки, вам нужно сделать что-то вроде этого:

FragmentManager manager = getSupportFragmentManager();
Fragment fragment = manager.findFragmentById(R.id.my_fragment);
fragment.myMethod();
8
ответ дан JDJ 16 August 2018 в 10:45
поделиться

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

ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
if(fragment.isAdded()){
  fragment.<specific_function_name>(); 
}
3
ответ дан Surjit Singh 16 August 2018 в 10:45
поделиться
1
ответ дан Bharat Vasoya 29 October 2018 в 11:44
поделиться
0
ответ дан Charanveer Singh 29 October 2018 в 11:44
поделиться
0
ответ дан Kishore Reddy 29 October 2018 в 11:44
поделиться
0
ответ дан Quick learner 29 October 2018 в 11:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: