Topic: Fragment (Фрагменты)
Обсуждение статьи Fragment (Фрагменты)
Все вопросы проплачены кошками - всемирно известными производителями котят
You are not logged in. Please login or register.
Для регистрации на форуме следует написать мне письмо. В ответе я напишу правильный ответ для прохождения регистрации.
Форум Александра Климова → Android → Fragment (Фрагменты)
Интересный цикл статей, многое стало на места.
Я попробовал анимацию вида
fr.beginTransaction().replace(R.id.container, new TypeFrag(), "type")
.addToBackStack("type")
.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
.commit();
и ничего нет. А должно работать?
Кстати как управлять такой анимацией - duration и пр?
Здравствуйте!
Данный метод вызывает конфликт android.app.FragmentManager; и android.support.v4.app.Fragment;
@Override
public void count(String data) {
FragmentManager manager = getSupportFragmentManager();
WithTextViewFragment withTextViewFragment =
(WithTextViewFragment) manager.findFragmentById(R.id.fragment_withTextView);
withTextViewFragment.changeText(data);
}
Пробовал переделать так:
public void count(String data) {
FragmentManager manager = getFragmentManager();
WithTextViewFragment withTextViewFragment =
(WithTextViewFragment) manager.findFragmentById(R.id.fragment2);
withTextViewFragment.changeText(data);
}
Но тогда ругается на WithTextViewFragment. Как сделать лучше чтобы избежать конфликта старой и новой библиотеки FragmentManager?
Я не встречал проблем, если фрагменты используются из одной библиотеки. Поэтому просто приведите все к одному знаменателю.
Да, когда поставил везде одну библиотеку ошибки ушли.
Теперь крашится при запуске:
Unable to start activity ComponentInfo{com.example.ant_design.fragment5/com.example.ant_design.fragment5.MainActivity}: android.view.InflateException: Binary XML file line #16: Error inflating class fragment
Т.е. почему-то не надувается фрагмент с кнопкой, если его удалить из activity_main.xml то запускается.
Ума не приложу что там может быть не так....
fragment_with_button.xml прост до безобразия, сам код фрагмента в activity_main.xml тоже не бином Ньютона.
Сейчас буду экспериментировать
Подтверждаю проблему onCreateView с двумя версиями кода: вариант с "View rootView" работает отлично, а вот "Button button" не даёт скомпилить прогу.
Видимо, мы зря ищем "button" в "container" до вызова "inflate".. её там нет.
Первые 4 статьи по "фрагментам" компилялись на ура.. А вот 5-ая прямо забуксовала.. Лучше укажите, чтобы писали с нуля.. А то старый код по сути весь приходится удалять (
Там были просто опечатки. Я заново прошел урок и поправил те моменты, которые вызывали ошибку. Не вижу ничего страшного, если приходится что-то удалять из проекта. Это учебные примеры, лучше будете ориентироваться в коде, когда будете анализировать, что вызывает ошибку.
Добрый день, коллеги.
Никто не поможет мне разобраться в небольшом вопросе взаимодействия фрагмента и BottomNavigationView? Дело в том, что использую стандартную Bottom Navigation Activity (с 3-мя кнопками внизу экрана). По умолчанию – при нажатии на кнопки изменяется текст. Я хочу, чтобы при нажатии на кнопку – появлялся фрагмент. Но, когда написал код, то некорректно отображается эта панель с кнопками: эта панель оказывается вверху, а не снизу, как по умолчанию.
Как сделать так, чтобы при появлении фрагмента кнопки панели оставались там же?
Вот главный код:
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextMessage;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment fragment = null;
Class fragmentClass = null;
int id = item.getItemId();
if (id == R.id.navigation_home) {
fragmentClass = BiografyClass.class;
} else if (id == R.id.navigation_dashboard) {
fragmentClass = PhotoFragment.class;
} else if (id == R.id.navigation_notifications) {
fragmentClass = PhotoFragment.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
setTitle(item.getTitle());
return true;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextMessage = (TextView) findViewById(R.id.message);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
}
Activity_main:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.butam.biografy4.MainActivity">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
<fragment
android:id="@+id/fragment"
android:name="com.example.butam.biografy4.BiografyClass"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="?android:attr/windowBackground"
app:menu="@menu/navigation" />
</LinearLayout>
Fragment_biografy.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.butam.biografy4.MainActivity">
<LinearLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/activity_vertical_margin"
android:layout_marginLeft="@dimen/activity_horizontal_margin"
android:layout_marginRight="@dimen/activity_horizontal_margin"
android:layout_marginTop="@dimen/activity_vertical_margin"
android:text="Тут Текст 1" />
</LinearLayout>
</LinearLayout>
BiografyClass.java:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class BiografyClass extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
View rootView =
inflater.inflate(R.layout.fragment_biografy, container, false);
return rootView;
}
}
Если переходить на другую активность с помощью интента или просто выводить текст, то все корректно отображается. С фрагментами никак пока не разберусь.
Mish, нашел ошибку.
В классе главной активности:
fragmentManager.beginTransaction().replace(R.id.content, fragment).commit(); // "R.id.content", а у Вас "R.id.container"
Умаялся искать, если честно)
NeferSky, спасибо большое! Приду домой посмотрю! Спасибо еще раз!
NeferSky, спасибо еще раз. Правда, когда вставил content, менюшка была сверху, но при нажатии на все кнопки отображался только один первый фрагмент (т.е. не менялся). Я заменил content на fragment в главной активности. Теперь все работает! Спасибо, все корректно отображается. Подсказал мне, в каком направлении думать!
Добрый день. Можно ли каким-то образом использовать один фрагмент для нескольких активностей? Ну например, некий фрагмент - синглтон.
Добрый день. Можно ли каким-то образом использовать один фрагмент для нескольких активностей? Ну например, некий фрагмент - синглтон.
Да можно, почему бы и нет... Простой учебный вариант - написать класс фрагмента, и создавать его экземпляры в любых активностях, каких захотите.
Сложный вариант реализации синглетона... Ну, навскидку - описать в классе фрагмента статический метод, возвращающий экземпляр фрагмента. В методе проверять - "если не создан то создать" и возвращать экземпляр... а, ну и внутри класса ссылку на созданный экземпляр тоже сохранять куда-нибудь... Убиваца экземпляр будет, наверное, самостоятельно, java многое прощает в плане чистки мусора... Хотя, тут надо бы проверить - если экземпляр фрагмента никем не используется, то может убица самостоятельно...
Вот. Абстрактный вопрос - абстрактный ответ))
Привет. Такой вопрос:
Есть поле в базе типа long в котором хранится дата в формате UTC. Для вывода использую ListFragment совместно с SimpleCursorAdapter. Возможно ли при выводе как-то форматировать дату для приведения ее к удобочитаемому виду?
В Java есть классы для работы с датами http://developer.alexanderklimov.ru/and … a/date.php Изучите этот вопрос.
Задействовать классы для преобразования дат - это понятно, непонятно в какой момент их задействовать.
Я использую метод query наследника SQLiteOpenHelper для получения курсора, который подставляю в конструктор SimpleCursorAdapter, туда же подставляются массив имен колонок откуда будут браться данные и массив имен полей раскладки, в которой они будут отображаться. Непосредственно данными я не оперирую. Если я правильно понимаю SimpleCursorAdapter сам получает данные и помещает их в ListFragment. Возможно ли как-то указать адаптеру, что данные перед выводом надо как-то обработать или здесь требуется совершенно иной подход?
Форум Александра Климова → Android → Fragment (Фрагменты)
Powered by PunBB, supported by Informer Technologies, Inc.