Страница 1 из 2
fragment -ы
Добавлено: 27 июн 2014, 22:44
Rustam
Копал, копал не нашел ответа
есть MainActivity
в нем FrameLayout, который наполняется фрагментами
Код: Выделить всё
//переключение tab-ов-обработка
Tab_view.setOnTabChangedListener(new OnTabChangeListener() {
@Override
public void onTabChanged(String tabId) {
// TODO Auto-generated method stub
work_space=getFragmentManager().beginTransaction();
if (tabId=="tab1") {//главный экран
common_screen=new common_frag();
work_space.replace(com.example.acorz.R.id.work_space,common_screen);
}
if (tabId=="tab2") {//экран настроек
change_screen=new change_frag();
work_space.replace(com.example.acorz.R.id.work_space,change_screen);
}
if (tabId=="tab3") {//экран результата
result_screen=new result_frag();
work_space.replace(com.example.acorz.R.id.work_space,result_screen);
}
//work_space.addToBackStack(null);
work_space.commit();// Обновление рабочего поля
}
});
Собственно один класс из фрагментов
Код: Выделить всё
package com.example.acorz;
import android.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Fragment;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.WorkSource;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class common_frag extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(com.example.acorz.R.layout.common, container, false );
}
public void about_btn_clk(View v){
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity().getApplicationContext());
builder.setTitle("ERROR")
.setCancelable(false)
.setMessage("ERROR :")
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
//work=true;
}
});
AlertDialog alert=builder.create();
alert.show();
}
}
при работе приложения при нажатии на кнопку приложение вылетает
ошибка как я понял выдается изза того что я не верно передаю Context в Builder
как правильно делать так и не понял
Re: fragment -ы
Добавлено: 27 июн 2014, 23:13
Rustam
решил вопрос вот так
переписав метод OnCreate в фрагменте
Код: Выделить всё
public class common_frag extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//создание view
View v=inflater.inflate(com.example.acorz.R.layout.common, container, false);
//получение кнопки "О программе"
Button about_btn=(Button)v.findViewById(com.example.acorz.R.id.about_btn);
//обработчик нажатия на кнопку "О программе"
about_btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
AlertDialog.Builder builder=new AlertDialog.Builder(v.getContext());
//AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
builder.setTitle("О программе")
.setCancelable(false)
.setMessage("Первый тест, дальше больше :)")
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.cancel();
//work=true;
}
});
AlertDialog alert=builder.create();
alert.show();
}
});
return v;
};
Но вот все равно вопрос как правильно общаться между классами MainActivity и классами фрагментами
Re: fragment -ы
Добавлено: 28 июн 2014, 00:15
Mikhail_dev
Пожалуйста, уберите код в теги. Ну сложно читать, честно.
Re: fragment -ы
Добавлено: 28 июн 2014, 13:10
Mikhail_dev
при работе приложения при нажатии на кнопку приложение вылетает
ошибка как я понял выдается изза того что я не верно передаю Context в Builder
как правильно делать так и не понял
Надо не думать, надо смотреть и понимать что за ошибка. Вам обязателен к просмотру данный вебинар, который научит находить ошибки
viewtopic.php?f=60&t=3198
Ошибка тут из-за незнания Вами Java, ибо
tabId=="tab1"
так строки никто не сравнивает. В итоге вы просто на выходе из условия получите common_screen как нулевой объект.
Классы обычно называют с большой буквы.
common_frag - это плохой стиль и сразу бросается в глаза.
Изучайте Java, без неё нет смысла учить Android. Ну и почитайте мою вторую заметку в моей подписи, сверху.
Re: fragment -ы
Добавлено: 29 июн 2014, 21:02
Rustam
сравнение tabId=="tab1" работает безотказно, переключение tab-ов работает
Re: fragment -ы
Добавлено: 29 июн 2014, 21:25
Rustam
Возник другой вопрос:
как организовать доступ к элементам fragment-ов
есть фрагмент на котором расположен GridView
по нажатию кнопки я достаю этот фрагмент и помещаю в менеджер фрагментов
Код: Выделить всё
work_space=getFragmentManager().beginTransaction();
sale_screen=new sale_frag();
work_space.replace(com.example.acorz.R.id.work_space,sale_screen);
work_space.commit();
Tab_view.setCurrentTab(3);
как получить доступ к заполнению GridView
такой вот способ никак не выдает ссылку, всегда null
Код: Выделить всё
Fragment frag=getFragmentManager().findFragmentById(R.id.work_space);
sale_grid=(GridView)frag.getView().findViewById(R.id.sale_grid_View);
и вообще везде указывается по-разному возможность доступа к элементам фрагментов
каким образом делать этот доступ? много инфы перелапатил
есть вариант доступа к GridView в самом в фрагменте в методе OnCreate - там все работает, но там возникает другой вопрос
пропадает возможность доступа к ресурсам приложения, в частности, к папке Drawable.
Re: fragment -ы
Добавлено: 29 июн 2014, 22:38
Foenix
Rustam писал(а):сравнение tabId=="tab1" работает безотказно, переключение tab-ов работает
ого!

Re: fragment -ы
Добавлено: 30 июн 2014, 08:56
Mikhail_dev
сравнение tabId=="tab1" работает безотказно, переключение tab-ов работает
Ясно. Дальше даже не читал. Подучите Java - приходите.
Re: fragment -ы
Добавлено: 30 июн 2014, 12:30
KamiSempai
Mikhail_dev писал(а):сравнение tabId=="tab1" работает безотказно, переключение tab-ов работает
Ясно. Дальше даже не читал. Подучите Java - приходите.
Foenix писал(а):Rustam писал(а):сравнение tabId=="tab1" работает безотказно, переключение tab-ов работает
ого!

Скорее всего в tabId находится интернированная строка, так что tabId=="tab1" действительно должен работать. Вопрос только в том, понимает ли это Rustam.
Re: fragment -ы
Добавлено: 04 июл 2014, 21:11
Rustam
Пример переключение TAB-ов
взят отсюда
http://startandroid.ru/ru/uroki/vse-uro ... ladki.html
Код: Выделить всё
package ru.startandroid.develop.p0781tabcontentfactory;
import android.app.TabActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TabHost;
import android.widget.TextView;
public class MainActivity extends TabActivity {
final String TABS_TAG_1 = "Tag 1";
final String TABS_TAG_2 = "Tag 2";
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost();
TabHost.TabSpec tabSpec;
tabSpec = tabHost.newTabSpec(TABS_TAG_1);
tabSpec.setContent(TabFactory);
tabSpec.setIndicator("Вкладка 1");
tabHost.addTab(tabSpec);
tabSpec = tabHost.newTabSpec(TABS_TAG_2);
tabSpec.setContent(TabFactory);
tabSpec.setIndicator("Вкладка 2");
tabHost.addTab(tabSpec);
}
TabHost.TabContentFactory TabFactory = new TabHost.TabContentFactory() {
@Override
public View createTabContent(String tag) {
if (tag == TABS_TAG_1) {
return getLayoutInflater().inflate(R.layout.tab, null);
} else if (tag == TABS_TAG_2) {
TextView tv = new TextView(MainActivity.this);
tv.setText("Это создано вручную");
return tv;
}
return null;
}
};
}
и не надо тут говорить, что tag == TABS_TAG_1 не работает, здесь все работает, если своим ответом ставите цель только указать на то, что Новичок что-то не знает - Ваше право, только смысл писать ответ не на поставленный вопрос??
Вопрос был в другом: как правильно передавать данные между фрагментами, но в итоге я его решил иначе, без создание фрагментов(активностей)
так что тему можно закрывать

Re: fragment -ы
Добавлено: 04 июл 2014, 21:26
altwin
Rustam писал(а):Пример переключение TAB-ов
взят отсюда
http://startandroid.ru/ru/uroki/vse-uro ... ladki.html
Код: Выделить всё
package ru.startandroid.develop.p0781tabcontentfactory;
import android.app.TabActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TabHost;
import android.widget.TextView;
public class MainActivity extends TabActivity {
final String TABS_TAG_1 = "Tag 1";
final String TABS_TAG_2 = "Tag 2";
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost tabHost = getTabHost();
TabHost.TabSpec tabSpec;
tabSpec = tabHost.newTabSpec(TABS_TAG_1);
tabSpec.setContent(TabFactory);
tabSpec.setIndicator("Вкладка 1");
tabHost.addTab(tabSpec);
tabSpec = tabHost.newTabSpec(TABS_TAG_2);
tabSpec.setContent(TabFactory);
tabSpec.setIndicator("Вкладка 2");
tabHost.addTab(tabSpec);
}
TabHost.TabContentFactory TabFactory = new TabHost.TabContentFactory() {
@Override
public View createTabContent(String tag) {
if (tag == TABS_TAG_1) {
return getLayoutInflater().inflate(R.layout.tab, null);
} else if (tag == TABS_TAG_2) {
TextView tv = new TextView(MainActivity.this);
tv.setText("Это создано вручную");
return tv;
}
return null;
}
};
}
и не надо тут говорить, что tag == TABS_TAG_1 не работает, здесь все работает, если своим ответом ставите цель только указать на то, что Новичок что-то не знает - Ваше право, только смысл писать ответ не на поставленный вопрос??
Вопрос был в другом: как правильно передавать данные между фрагментами, но в итоге я его решил иначе, без создание фрагментов(активностей)
так что тему можно закрывать

This class was deprecated in API level 13.
Вы учитесь делать не правильно?
Но вот все равно вопрос как правильно общаться между классами MainActivity и классами фрагментами
работа с фрагментами 104 - 111 уроки включительно.
Re: fragment -ы
Добавлено: 05 июл 2014, 13:42
Mikhail_dev
Вы учитесь делать не правильно?
А как ты думаешь, если человек объекты сравнивает через == ?
Re: fragment -ы
Добавлено: 05 июл 2014, 13:57
altwin
Mikhail_dev писал(а):Вы учитесь делать не правильно?
А как ты думаешь, если человек объекты сравнивает через == ?
Почитал тему.. тут и думать не нужно... ведь в ответ прозвучало только - оно же работает... и я вообще другое спрашивал, а вот то, что получение похожего результата и работает разные вещи, мало кому интересно

Автору бы профессию сменить с таким подходом срочно...
Re: fragment -ы
Добавлено: 06 июл 2014, 14:06
finberg
Mikhail_dev писал(а):Вы учитесь делать не правильно?
А как ты думаешь, если человек объекты сравнивает через == ?
Строковые константы, впринципе, можно сравнивать через ==. Так написано в книге Хорстмана.
Re: fragment -ы
Добавлено: 06 июл 2014, 15:03
altwin
finberg писал(а):Mikhail_dev писал(а):Вы учитесь делать не правильно?
А как ты думаешь, если человек объекты сравнивает через == ?
Строковые константы, впринципе, можно сравнивать через ==. Так написано в книге Хорстмана.
просто слов нет... ну и какое нафик отношение это имеет к сравнению объектов? Хотя да можно пойти путем переопределения метода toString для сравниваемых классов и задать одинаковое значение, вот только вы хоть понимаете какая это чушь?
Re: fragment -ы
Добавлено: 07 июл 2014, 10:51
KamiSempai
altwin писал(а):finberg писал(а):...
Строковые константы, впринципе, можно сравнивать через ==. Так написано в книге Хорстмана.
просто слов нет... ну и какое нафик отношение это имеет к сравнению объектов? Хотя да можно пойти путем переопределения метода toString для сравниваемых классов и задать одинаковое значение, вот только вы хоть понимаете какая это чушь?
Это имеет прямое отношение к объектам, так как сравниваются ссылки на них. Строковые константы в этом плане не отличаются от остальных. Так что, если в переменной хранятся только ссылки на константы, можно использовать сравнение "==". Если же строка не является ссылкой на константу, то ее достаточно интернировать. Все константы интернируются автоматически.
[syntax=java]String s1 = "qwert";
String s2 = "qwert";
StringBuilder builder = new StringBuilder("qwe");
builder.append("rt");
s1 == s2 // Истина
s1 == builder.toString() // Ложь
s1 == builder.toString().intern() // Истина[/syntax]
Re: fragment -ы
Добавлено: 07 июл 2014, 13:32
Mikhail_dev
finberg писал(а):Mikhail_dev писал(а):Вы учитесь делать не правильно?
А как ты думаешь, если человек объекты сравнивает через == ?
Строковые константы, впринципе, можно сравнивать через ==. Так написано в книге Хорстмана.
Враньё. Я читал Хорстмана, оба тома. Таким образом сравнивать нельзя строки.
Re: fragment -ы
Добавлено: 07 июл 2014, 14:08
Viewer
Re: fragment -ы
Добавлено: 07 июл 2014, 14:33
Mikhail_dev
И где там intern???
Re: fragment -ы
Добавлено: 07 июл 2014, 15:02
KamiSempai
Mikhail_dev писал(а):И где там intern???
[syntax=java] final String TABS_TAG_1 = "Tag 1";
final String TABS_TAG_2 = "Tag 2"; [/syntax]