почему избегаешь активити?finberg писал(а):Pedro Sancez писал(а): без участии активити
Урок 106. Android 3. Fragments. Взаимодействие с Activity
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
-
- Сообщения: 4
- Зарегистрирован: 03 ноя 2014, 17:20
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
В общем не буду ходить вокруг-да около. Кроме как у Вас, мне спросить не у кого.(За это вам ОГРОМНЕЙШАЯ БЛАГОДАРНОСТЬ!) В общем мне нужно написать примитивную программу, управляющую локальной базой данных пользователей.
Регистрация/авторизация пользователей, чтение/изменение/сохранение личных данных, просмотр списка пользователей в базе.
Данные - логин/пароль, имя, контактные данные (email, www, телефон). Вот код главной Activity, а все действия -ввод данных(авторизация, регистрация, просмотр и т.д) будет происходить во фрагментах, которые должны динамически менять друг друга. Но вот беда - я не знаю, как получить доступ к базе данных, объявленной в Activity из фрагментов, чтобы в них полноценно работать с ней. Может я в чём-то не прав? Может это бред, и можно как то иначе всё сделать? Буду ОЧЕНЬ признателен за совет!
Регистрация/авторизация пользователей, чтение/изменение/сохранение личных данных, просмотр списка пользователей в базе.
Данные - логин/пароль, имя, контактные данные (email, www, телефон). Вот код главной Activity, а все действия -ввод данных(авторизация, регистрация, просмотр и т.д) будет происходить во фрагментах, которые должны динамически менять друг друга. Но вот беда - я не знаю, как получить доступ к базе данных, объявленной в Activity из фрагментов, чтобы в них полноценно работать с ней. Может я в чём-то не прав? Может это бред, и можно как то иначе всё сделать? Буду ОЧЕНЬ признателен за совет!
Код: Выделить всё
public class MainActivity extends Activity {
private Fragment fragment1, fragment2,fragment3;
private FragmentTransaction ft;
Button btn;
MyHelper my;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
my = new MyHelper(this);
SQLiteDatabase db= my.getWritableDatabase();
fragment1= new Fragment1();
fragment2= new Fragment2();
fragment3= new Fragment3();
ft = getFragmentManager().beginTransaction();
//ft.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_in_right);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
ft.replace(R.id.fragCont, fragment1);
ft.addToBackStack(null);
ft.commit();
btn =(Button)findViewById(R.id.btn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
ft = getFragmentManager().beginTransaction();
//ft.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_in_right);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
if(fragment1.isVisible()){
ft.replace(R.id.fragCont, fragment2);
}
if (fragment2.isVisible())
{
ft.replace(R.id.fragCont, fragment3);
}
if (fragment3.isVisible()) {
ft.replace(R.id.fragCont, fragment1);
}
ft.commit();
}
});
}
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
работать с б.д. можно по-разному. Например, с помощью контент-провайдеров. По этой теме был вебинар. Посмотри для начала его. Я там освещала самые важные вопросы и по возможности коротко.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Как на счет Static подключения к бд в активити (желательно в том, которое живет дольше всех), которое будет использоваться во всех остальных уголках приложения?
public static DBConnector mDB; // твой класс, наследующий SQLiteOpenHelper
private SQLiteDatabase db;
...
Один раз в приложении открываешь:
mDB = new DBConnector(this, имя базы); // не помню стандартный это конструктор или нет, скорее всего рукописный)
db = mDB.getWritableDatabase();
потом используешь ИмяАктивити.mDB или ИмяАктивити.db в других местах.
Конечно если БД используется очень редко, то лучше открывать\закрывать такие соединения только при необходимости, а не оставлять открытыми все время.
public static DBConnector mDB; // твой класс, наследующий SQLiteOpenHelper
private SQLiteDatabase db;
...
Один раз в приложении открываешь:
mDB = new DBConnector(this, имя базы); // не помню стандартный это конструктор или нет, скорее всего рукописный)
db = mDB.getWritableDatabase();
потом используешь ИмяАктивити.mDB или ИмяАктивити.db в других местах.
Конечно если БД используется очень редко, то лучше открывать\закрывать такие соединения только при необходимости, а не оставлять открытыми все время.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
а я там по-моему три способа, включая синглтон, упоминаю. Статик нет, лучше не делать.
Просто к.п. самый продвинутый на сегодняшний момент способ. Он уже и не новый совсем. Да и реализовывать несложно, надо только разобраться. Зато открывает перспективы большие, т.к. к.п. связан с реализацией несколько очень полезных паттернов в андроиде (в связке с другими классами).
Просто к.п. самый продвинутый на сегодняшний момент способ. Он уже и не новый совсем. Да и реализовывать несложно, надо только разобраться. Зато открывает перспективы большие, т.к. к.п. связан с реализацией несколько очень полезных паттернов в андроиде (в связке с другими классами).
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
-
- Сообщения: 4
- Зарегистрирован: 03 ноя 2014, 17:20
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Помогите пожалуйста в следующем вопросе. Мне нужно вывести в листвью, которое находится во фрагменте, базу данных. Я в адаптерах не силён, естественно конструктор ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, str); во фрагменте не работает. Как можно исправить это? Как ещё можно вывести бд из активити во фрагмент???
Код: Выделить всё
public class Fragment3 extends Fragment {
ListView lv;
SQLiteDatabase db;
ArrayList<String> str;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v= inflater.inflate(R.layout.fragment3, null);
db = MainActivity.dbh.getWritableDatabase();
str = new ArrayList<String>();
Cursor c = db.query("mytable",null,null,null,null,null,null);
if(c.moveToFirst()){
int nameColIndex = c.getColumnIndex("login");
int passColIndex = c.getColumnIndex("password");
do {
String name=c.getString(nameColIndex);
String pass=c.getString(passColIndex);
str.add(name);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, str);
lv.setAdapter(dataAdapter);
}
while(c.moveToNext());
}
return v;
}
}
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Вам нужен SimpleCursorAdapter, и не надо будет перегонять в ArrayList.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Всем привет. Помогите пожалуйста.
Делаю приложение в котором 2 фрагмента - в 1 Listview со списком заголовков статей, второй отображает содержимое статей. Хочу сделать с помощью replace. Ссылку передаю в активити с помощью интерфейса someEvent(как на уроке). Потом из активити отдаю ее фрагменту2.
тут все передаеться, и переходится на новый фрагмент, НО вместо того чтобы открыть WebView во Фрагменете она открывается в браузере!! Почему не могу понять
Вот код Fragment2.class
Подскажите пожалуйста, в чем может быть проблема?!
Делаю приложение в котором 2 фрагмента - в 1 Listview со списком заголовков статей, второй отображает содержимое статей. Хочу сделать с помощью replace. Ссылку передаю в активити с помощью интерфейса someEvent(как на уроке). Потом из активити отдаю ее фрагменту2.
Код: Выделить всё
@Override
public void someEvent(String s) {
final Fragment frag2 = getFragmentManager().findFragmentById(R.id.fragment2);
final WebView web = ((WebView) frag2.getView().findViewById(R.id.webView));
web.loadURL(s);
}
Вот код Fragment2.class
Код: Выделить всё
public class Fragment2 extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment2, null);
return v;
}
}
Подскажите пожалуйста, в чем может быть проблема?!
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Не могу разобраться в своей проблеме:
Во фрагментах у меня несколько кнопок, в активити текстовые поля.
Проблема в том что не могу поставить обработчик на несколько кнопок:
В данный момент использую для каждой кнопки свой метод onClick, но это бесконечный код....
Кто может помочь?
Во фрагментах у меня несколько кнопок, в активити текстовые поля.
Проблема в том что не могу поставить обработчик на несколько кнопок:
Код: Выделить всё
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
Кто может помочь?
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Помочь в чем? Я не увидел описания проблемы. Обработчик на несколько кнопок так и ставится, так что всё в порядке.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Проблема в том что во фрагменте он не хочет работать, а если я его ставлю в активити то видимо он не видит кнопки во фрагментахMikhail_dev писал(а):Помочь в чем? Я не увидел описания проблемы. Обработчик на несколько кнопок так и ставится, так что всё в порядке.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
((YourActivityClassName)getActivity()).yourPublicMethod(); попробуй так. Т.е. сет онклик во фрагменте, но вызывает он рукодельный паблик метод у активити.chasovoy писал(а):Проблема в том что во фрагменте он не хочет работать, а если я его ставлю в активити то видимо он не видит кнопки во фрагментахMikhail_dev писал(а):Помочь в чем? Я не увидел описания проблемы. Обработчик на несколько кнопок так и ставится, так что всё в порядке.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Потому что у вас интерфейс OnClickListener определён для активности, а не для фрагмента. Сделайте его и для фрагментаchasovoy писал(а):Проблема в том что во фрагменте он не хочет работать, а если я его ставлю в активити то видимо он не видит кнопки во фрагментахMikhail_dev писал(а):Помочь в чем? Я не увидел описания проблемы. Обработчик на несколько кнопок так и ставится, так что всё в порядке.
((YourActivityClassName)getActivity()).yourPublicMethod(); попробуй так. Т.е. сет онклик во фрагменте, но вызывает он рукодельный паблик метод у активити.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
По хорошему такую картинку нужно на весь андроид налепить. Фрагменты сами по себе велосипед велосипедный. Чего только стоит куча АПИ версий совместимость которых поддерживается вермишелью из саппорт костылей. Так что для андроида это нормально.Mikhail_dev писал(а):Потому что у вас интерфейс OnClickListener определён для активности, а не для фрагмента. Сделайте его и для фрагментаchasovoy писал(а):Проблема в том что во фрагменте он не хочет работать, а если я его ставлю в активити то видимо он не видит кнопки во фрагментахMikhail_dev писал(а):Помочь в чем? Я не увидел описания проблемы. Обработчик на несколько кнопок так и ставится, так что всё в порядке.((YourActivityClassName)getActivity()).yourPublicMethod(); попробуй так. Т.е. сет онклик во фрагменте, но вызывает он рукодельный паблик метод у активити.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Нет, ненормально. Не надо мешать багнутый андроид и сильносвязанную архитектуру. Код должен писаться на интерфейсах и не должен зависеть друг с другом. Это относится к любому коду.
А что не так с фрагментами? Саппорт либа да, та еще морока.
А что не так с фрагментами? Саппорт либа да, та еще морока.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Изначально же не было планшетов, и только после их появления добавили фрагменты. Фрагмент просто надстройка над активити. По поводу имплементации это еще нужно как-то объяснить новичку.Mikhail_dev писал(а):Нет, ненормально. Не надо мешать багнутый андроид и сильносвязанную архитектуру. Код должен писаться на интерфейсах и не должен зависеть друг с другом. Это относится к любому коду.
А что не так с фрагментами? Саппорт либа да, та еще морока.
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Если новичек не знает имплементации, то для таких я написал заметку, что первая в моей подписи.
Я бы не называл фрагмент как надстройка, потому что он легче чем активность и не требует записи в манифесте. Да и планшеты появились до версии 3.0, у меня даже был такой. Их было не совсем много, но они были.
Я бы не называл фрагмент как надстройка, потому что он легче чем активность и не требует записи в манифесте. Да и планшеты появились до версии 3.0, у меня даже был такой. Их было не совсем много, но они были.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Добрый день! Подскажите, могу ли я через метод getActivity передать id метода onItemClick ListFragmenta в Activity?
- KamiSempai
- Сообщения: 1339
- Зарегистрирован: 17 фев 2012, 21:23
- Откуда: Мордор
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Можно использовать AdapterView.OnItemClickListener. Если активити реализует этот интерфейс, передавать нажатие через onItemClick.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.
Хватит таскать макулатуру на тренировку! Используй T Note.
Re: Урок 106. Android 3. Fragments. Взаимодействие с Activit
Как реализовать этот урок после того как onAttach(Actitivity) стал Deprecated (достали разрабы...) ?
пробовал вот так-
в итоге на попытке передать значение приложение вылетает
FATAL EXCEPTION: main
java.lang.NullPointerException
at company.ais.simplearithmetic.fragment.MainMenuFragment$1.onClick(MainMenuFragment.java:58)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)
пробовал вот так-
Код: Выделить всё
public interface onMainMenuListener
{
public void onButtonClickEvent(int i);
}
onMainMenuListener mainMenuListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
Activity activity;
if (context instanceof Activity){
activity=(Activity) context;
mainMenuListener = (onMainMenuListener) activity;
}
}
catch (ClassCastException e)
{
throw new ClassCastException(context.toString()+" must implement onMainMenuListener");
}
}
Код: Выделить всё
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v=inflater.inflate(R.layout.mainmenu_fragment,container,false);
Button trainButton = (Button) v.findViewById(R.id.button_train);
trainButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
[color=#BF0000]mainMenuListener.onButtonClickEvent(1);[/color]
}
});
Button youtubeButton = (Button) v.findViewById(R.id.button_youtube);
youtubeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
[color=#BF0000]mainMenuListener.onButtonClickEvent(2);[/color]
}
});
return v;
}
java.lang.NullPointerException
at company.ais.simplearithmetic.fragment.MainMenuFragment$1.onClick(MainMenuFragment.java:58)
at android.view.View.performClick(View.java:4438)
at android.view.View$PerformClick.run(View.java:18422)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5001)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
at dalvik.system.NativeStart.main(Native Method)