Activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"MainActivity.onCreate();");
setContentView(R.layout.activity_layout);
actionBar = getSupportActionBar();
drawerlayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerlayout.setDrawerShadow(R.drawable.drawer_shadow,
GravityCompat.END);
// cancelaNotificacao(R.drawable.ic_launcher);
Intent it = new Intent(this, MyService.class);
if (!MyService.RUNNING) {
startService(it);
}
bindService(it, this, 0);
}
@Override
public void onServiceConnected(ComponentName name, IBinder binderservice) {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"Activity onServiceConnected");
LocalBinder binder = (LocalBinder) binderservice;
this.service = binder.getService();
carregaRadio();
if (!service.isIRCConnected()) {
carregaLogin();
} else {
carregaChatdoService();
}
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}
private void carregaRadio() {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"Carregando fragment radio.");
ActionBar.Tab tab = actionBar.newTab()
.setCustomView(createTabCustomView(TITLE_TAB_RADIO))
.setTabListener(
new MyTabListener<RadioFragment>(this, TITLE_TAB_RADIO,
RadioFragment.class));
actionBar.addTab(tab, 0);
}
private void carregaChat() {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"Carregando fragment chat.");
ActionBar.Tab tab = actionBar.newTab()
.setCustomView(createTabCustomView(MyService.CANAL))
// .setText(TITLE_TAB_CHAT)
.setTabListener(
new MyTabListener<ChatFragment>(this, MyService.CANAL,
ChatFragment.class));
actionBar.addTab(tab, 1, true);
// ADICIONAR O USERSFRAGMENT NO DRAWER DO CHAT
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.drawer_container, new UserListFragment(),
TAG_USERS_FRAGMENT).commit();
}
private void carregaLogin() {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"Carregando fragment login.");
ActionBar.Tab tab = actionBar.newTab()
.setCustomView(createTabCustomView(TITLE_TAB_LOGIN))
// .setText(TITLE_TAB_LOGIN)
.setTabListener(
new MyTabListener<LoginFragment>(this, TITLE_TAB_LOGIN,
LoginFragment.class));
actionBar.addTab(tab, 1, true);
}
private void carregaChatdoService() {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"Activity reaberta, pegando dados do service.");
carregaChat();
try {
for (Conversa adapter : service.getAllPVTAdapters()) {
String nick = service.getUsersAdapter()
.getUser(adapter.getUUID()).getNick();
ActionBar.Tab tab = actionBar.newTab()
.setCustomView(createTabCustomView(nick))
.setTabListener(
new MyTabListener<ChatFragment>(this, adapter
.getUUID().toString(),
ChatFragment.class));
actionBar.addTab(tab);
}
} catch (Exception e) {
Crashlytics.logException(e);
Crashlytics
.log(Log.ERROR,
TAG_ACTIVITY_LIFECYCLE,
"Erro ao tentar recuperar todos os pvts do service");
}
}
ChatFragment (O fragment que eh responsavel por exibir uma conversa, possui basicamente um listivew e um edittext):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Crashlytics.log(Log.INFO, TAG_FRAGMENT_LIFECYCLE,
"ChatFragment.onCreateView();");
// Em algumas versões do Android, este metódo ocasionará o chamado do
// metodo onOptionsMenuCreate() imediatamente
setHasOptionsMenu(true);
View view = inflater.inflate(R.layout.chat_layout, container, false);
edittext = (MyEditText) view.findViewById(R.id.chatinput);
edittext.setOnEditorActionListener(this);
listview = (ListView) view.findViewById(R.id.chatlist);
bt_send = (ImageView) view.findViewById(R.id.sendbutton);
bt_send.setOnClickListener(this);
registerForContextMenu(listview);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Crashlytics.log(Log.INFO, TAG_FRAGMENT_LIFECYCLE,
"ChatFragment.onActivityCreated();");
activity = (MainActivity) getActivity();
if (this.isChannel()) {
conversa = activity.getService().getCanalAdapter();
} else {
conversa = activity.getService().getPVTAdapter(
UUID.fromString(getArguments().getString(EXTRA_ARGUMENT)));
}
listview.setAdapter(conversa);
// se estiver voltando de uma rotação, savedInstanceState vai ser
// diferente de null
if (savedInstanceState != null) {
// salva a posicao na variavel global para ser recuperada no
// onresume
listview_position_recover = savedInstanceState
.getInt(LISTSTATE, -1);
// se antes da rotação o teclado estava aberto, abre-o novamente
if (savedInstanceState.getBoolean(KEYBOARDSTATE)) {
openKeyboard(1000);
// se não for um delay grande não abre essa m...
}
}
}
TabListener:
public class MyTabListener<T extends Fragment> implements
ActionBar.TabListener {
private Fragment mFragment;
private final Activity mActivity;
private final String mTag;
private final Class<T> mClass;
/**
* Constructor used each time a new tab is created.
*
* @param activity
* The host Activity, used to instantiate the fragment
* @param tag
* O TARGET DO FRAGMENT, SERA USADO PARA RECUPERAR O ADAPTER
* @param clz
* The fragment's Class, used to instantiate the fragment
*/
public MyTabListener(Activity activity, String tag, Class<T> clz) {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"Criando tablistener da tab " + tag + ".");
mActivity = activity;
mTag = tag;
mClass = clz;
mFragment = getSupportFragmentManager().findFragmentByTag(mTag);
}
/* The following are each of the ActionBar.TabListener callbacks */
@SuppressLint("UseValueOf")
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE, "tab " + mTag
+ " selecionada.");
// CONTROLE DA EXIBICAO DO FRAGMENT DE USERS
// O DRAWER SOMENTE EXIBIRA SE O CANAL ESTIVER SENDO EXIBIDO
if (mTag.equalsIgnoreCase(MyService.CANAL)) {
MainActivity.this.drawerlayout
.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
} else {
MainActivity.this.drawerlayout
.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
// Check if the fragment is already initialized
if (mFragment == null) {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"mFragment == null, instanciando.");
// If not, instantiate and add it to the activity
Bundle args = new Bundle();
args.putString(ChatFragment.EXTRA_ARGUMENT, mTag);
mFragment = Fragment.instantiate(mActivity, mClass.getName(),
args);
ft.add(R.id.fragment_container, mFragment, mTag);
} else {
Crashlytics.log(Log.INFO, TAG_ACTIVITY_LIFECYCLE,
"mFragment != null, attach()");
// If it exists, simply attach it in order to show it
ft.attach(mFragment);
}
// TRATAMENTO DA TAB QUANDO SELECIONADA
TextView textview;
try {
textview = getTabCustomView(tab);
// COR DE SELECAO
textview.setTextColor(Color.WHITE);
textview.setShadowLayer(new Float(20.0), new Float(0.0),
new Float(0.0), Color.WHITE);
} catch (TabNotFoundException e) {
Crashlytics.logException(e);
}
}
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
if (mFragment != null) {
// por usar um customview, o titulo precisa receber um tom mais
// apagado manualmente nas tabs nao selecionadas
TextView textview;
try {
textview = getTabCustomView(tab);
textview.setTextColor(getResources().getColor(
R.color.irc_color_14_grey));
textview.setShadowLayer(0, 0, 0, 0);
} catch (TabNotFoundException e) {
Crashlytics.logException(e);
}
// Detach the fragment, because another one is being attached
ft.detach(mFragment);
}
}
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// geralmente nao faz nada....
}
}To ficando meio perdido, nao sei mesmo o que fazer. O fragment tem que acessar a referencia do service na activity somente após o onServiceConnected() dela. Aguardo ajuda.
Desde já, obrigado.
--
You received this message because you are subscribed to the Google Groups "Android Brasil - Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email to androidbrasil-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.






0 comentários:
Postar um comentário