现在很流行ViewPager+Fragment来实现可滑动底部或者顶部的菜单,在这里我使用的是ActionBar。在真实开发中,很少会用到,但是可以根据自己的需求,将ActionBar换成顶部或者底部LinearLayout布局(或者用RadioGroup)来实现:
import java.util.ArrayList;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import com.example.actionbar_fragment_tab.R;
import com.lb.actionbar_fragment_tab.fragment.MyFragment;
/***
*这个是主类Activity
*/
@SuppressLint("NewApi")
public class MainActivity extends FragmentActivity implements TabListener,OnPageChangeListener{
private ViewPager viewpager;
private List<Fragment> fragments;
private String[] title = new String[] { "第一页", "第二页", "第三页", "第四页" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initViewPager();
initActionBar();
}
/*****初始化ViewPager*****/
private void initViewPager() {
viewpager = (ViewPager) findViewById(R.id.viewpager);
fragments = new ArrayList<Fragment>();
//循环往List<Fragment> fragments集合里面添加Fragment
for (int i = 0; i < title.length; i++) {
MyFragment fragment = new MyFragment();
//利用Bundle可以传递数据
Bundle bundle = new Bundle();
bundle.putString(MyFragment.BUNDLE_NAME, title[i]);
fragment.setArguments(bundle);
fragments.add(fragment);
}
//为viewpager设置适配器
MyViewPagerAdapter adapter = new MyViewPagerAdapter(getSupportFragmentManager(),fragments);
viewpager.setAdapter(adapter);
//为viewpager设置监听器
viewpager.setOnPageChangeListener(this);
}
/**********初始化ActionBar****************/
@SuppressLint("NewApi")
private void initActionBar() {
ActionBar bar = getActionBar();
//设置ActionBar的模式为Tab模式
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for(int i =0;i<title.length;i++){
//添加bar并设置监听器
bar.addTab(bar.newTab().setText(title[i]).setTabListener(this));
}
}
/***********ActionBar监听器开始********/
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
//当ActionBar点击的时候就设置Viewpager为当前页面
viewpager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub
}
/***********ActionBar监听器结束********/
/***********ViewPager监听器开始********/
@Override
public void onPageScrollStateChanged(int state) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int position) {
//当Viewpage滑到一个页面的时候、 把ActionBar设置为当前页面
getActionBar().setSelectedNavigationItem(position);
}
/***********ViewPager监听器结束********/
class MyViewPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> list;
public MyViewPagerAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int arg0) {
return list.get(arg0);
}
@Override
public int getCount() {
return list.size();
}
}
}
//另外一个类
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.example.actionbar_fragment_tab.R;
public class MyFragment extends Fragment {
public static final String BUNDLE_NAME="bundle_name";
private Bundle bundle;
private TextView text;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bundle =getArguments();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_myfragment, null);
text=(TextView) view.findViewById(R.id.textview);
text.setText(bundle.getString(BUNDLE_NAME));
return view;
}
}