Olá pessoal, eu procurei por aqui e pelo google, mas não achei nada que eu pudesse implementar.
Eu estou usando o ABS com fragments, fiz a implementação default do projeto demo e está funcionando perfeitamente, mas como faço para trocar de Tab através de um click ?
Segue a minha classe Home que tem a criação das Tabs e PageView
package br.com.android.meusgastos;
import java.util.ArrayList;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TabHost;
import android.widget.TabWidget;
import br.com.android.meusgastos.fragments.EventosFragment;
import br.com.android.meusgastos.fragments.GraficoFragment;
import br.com.android.meusgastos.fragments.RelatorioFragment;
import br.com.android.meusgastos.graph.LineGraph;
import br.com.android.meusgastos.util.SampleList;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.app.ActionBar.Tab;
import com.actionbarsherlock.app.SherlockActivity;
import br.com.android.meusgastos.util.*;
public class Home extends SherlockFragmentActivity {
TabHost mTabHost;
ViewPager mViewPager;
TabsAdapter mTabsAdapter;
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(SampleList.THEME);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTabHost = (TabHost)findViewById(android.R.id.tabhost);
mTabHost.setup();
mViewPager = (ViewPager)findViewById(R.id.pager);
mTabsAdapter = new TabsAdapter(this, mTabHost, mViewPager);
mTabsAdapter.addTab(mTabHost.newTabSpec("home").setIndicator("Home",getResources().getDrawable(R.drawable.home)),
FragmentStackSupport.CountingFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("categorias").setIndicator("Categorias",getResources().getDrawable(R.drawable.categoria)),
FragmentStackSupport.CountingFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("eventos").setIndicator("Eventos",getResources().getDrawable(R.drawable.evento)),
EventosFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("relatórios").setIndicator("Relatórios",getResources().getDrawable(R.drawable.relatorio)),
RelatorioFragment.class, null);
mTabsAdapter.addTab(mTabHost.newTabSpec("graficos").setIndicator("Gráfico",getResources().getDrawable(R.drawable.grafico)),
GraficoFragment.class, null);
}
/*
public void lineGraphHandler (View view)
{
LineGraph line = new LineGraph();
Intent lineIntent = line.getIntent(this);
startActivity(lineIntent);
}
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("tab", mTabHost.getCurrentTabTag());
}
public static class TabsAdapter extends FragmentPagerAdapter
implements TabHost.OnTabChangeListener, ViewPager.OnPageChangeListener {
private final Context mContext;
private final TabHost mTabHost;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
static final class TabInfo {
private final String tag;
private final Class<?> clss;
private final Bundle args;
TabInfo(String _tag, Class<?> _class, Bundle _args) {
tag = _tag;
clss = _class;
args = _args;
}
}
static class DummyTabFactory implements TabHost.TabContentFactory {
private final Context mContext;
public DummyTabFactory(Context context) {
mContext = context;
}
public View createTabContent(String tag) {
View v = new View(mContext);
v.setMinimumWidth(0);
v.setMinimumHeight(0);
return v;
}
}
public TabsAdapter(FragmentActivity activity, TabHost tabHost, ViewPager pager) {
super(activity.getSupportFragmentManager());
mContext = activity;
mTabHost = tabHost;
mViewPager = pager;
mTabHost.setOnTabChangedListener(this);
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
}
public void addTab(TabHost.TabSpec tabSpec, Class<?> clss, Bundle args) {
tabSpec.setContent(new DummyTabFactory(mContext));
String tag = tabSpec.getTag();
TabInfo info = new TabInfo(tag, clss, args);
mTabs.add(info);
mTabHost.addTab(tabSpec);
notifyDataSetChanged();
}
@Override
public int getCount() {
return mTabs.size();
}
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(), info.args);
}
public void onTabChanged(String tabId) {
int position = mTabHost.getCurrentTab();
mViewPager.setCurrentItem(position);
}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
public void onPageSelected(int position) {
// Unfortunately when TabHost changes the current tab, it kindly
// also takes care of putting focus on it when not in touch mode.
// The jerk.
// This hack tries to prevent this from pulling focus out of our
// ViewPager.
TabWidget widget = mTabHost.getTabWidget();
int oldFocusability = widget.getDescendantFocusability();
widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
mTabHost.setCurrentTab(position);
widget.setDescendantFocusability(oldFocusability);
}
public void onPageScrollStateChanged(int state) {
}
}
}
Quando o usuário estiver na Aba RelatorioFragment, ele chama o GráficoFragment que está em outra Tab
package br.com.android.meusgastos.fragments;
import java.util.ArrayList;
import java.util.List;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import br.com.android.meusgastos.R;
import br.com.android.meusgastos.Home.TabsAdapter;
import br.com.android.meusgastos.adapter.RelatorioAdapter;
import br.com.android.meusgastos.model.Categoria;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
public class RelatorioFragment extends SherlockFragment implements OnItemClickListener {
private ListView listView;
private List<Categoria> categorias = new ArrayList<Categoria>();
private Button bt_vergrafico;
private TextView tv_fluxo;
TabsAdapter mTabsAdapter;
TabHost mTabHost;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.lista_relatorios, container, false);
bt_vergrafico = (Button) v.findViewById(R.id.bt_vergrafico);
bt_vergrafico.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getActivity(), "Click no botão", Toast.LENGTH_SHORT).show();
int currentTab = mTabHost.getCurrentTab();
//mTabHost.setCurrentTab(currentTab + 1); não funcionou dessa maneira, deu um nullpoint
}
});
listView = (ListView) v.findViewById(R.id.listview);
listView.setOnItemClickListener(this);
Categoria c1 = new Categoria("Item 1", "campo1", "campo2", "campo3");
Categoria c2 = new Categoria("Item 2", "campo1", "campo2", "campo3");
categorias.add(c1);
categorias.add(c2);
tv_fluxo = (TextView) v.findViewById(R.id.tv_fluxo);
tv_fluxo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "Click", Toast.LENGTH_SHORT).show();
}
});
listView.setAdapter(new RelatorioAdapter(getActivity(),categorias));
registerForContextMenu(listView);
return v;
}
@Override
public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) {
// TODO Auto-generated method stub
Toast.makeText(getActivity(), "Click", Toast.LENGTH_SHORT).show();
view.setBackgroundColor(Color.GRAY);//pinta o item selecionado
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Edição");
menu.add(Menu.NONE, 1, Menu.NONE, "Editar");
menu.add(Menu.NONE, 2, Menu.NONE, "Apagar");
}
@Override
public boolean onContextItemSelected(android.view.MenuItem item) {
// TODO Auto-generated method stub
switch (item.getItemId()) {
case 1:
Log.i("ContextMenu", "Item 1a was chosen");
Toast.makeText(getActivity(), "Click item 1", Toast.LENGTH_SHORT).show();
return true;
case 2:
Log.i("ContextMenu", "Item 1b was chosen");
Toast.makeText(getActivity(), "Click item 2", Toast.LENGTH_SHORT).show();
return true;
}
return super.onContextItemSelected(item);
}
}