本文借鉴了网上众大神的思路、代码,通过整合,归纳出Android移动端Tab切换效果的集中实现方式,包括Viewpager+Fragment、FragmentTransaction以及传统方式等多种实现路径,还有多种实现后的效果,以此希望和众多初学者一同进步、交流.因此文章虽为自己归纳,但内容不是完全原创;虽然内容借鉴了众大神的,但是归纳和整理,皆为自己完成,这是第一篇博客,后续的归纳整理会陆续呈上来
通过FragmentTransaction实现Fragment切换
主Activity
public class MainActivity extends FragmentActivity implements OnClickListener{
private ViewPager viewPager;
private ArrayList<Fragment> fragments = new ArrayList<>();
private ImageView iv1;
private ImageView iv2;
private TitleFragment tFragment;
private ContentFragment cFragment;
private ContentFragment2 cFragment2;
private ImageView iv3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
initview();
setDefaultFragment();
}
private void setDefaultFragment() {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.id_fragment_content, cFragment2);
ft.commit();
}
private void initview() {
iv1 = (ImageView)findViewById(R.id.imageView1);
iv2 = (ImageView)findViewById(R.id.imageView2);
iv3 = (ImageView)findViewById(R.id.imageView3);
// viewPager = (ViewPager)findViewById(R.id.viewPager);
// FragmentAdapter adapter = new FragmentAdapter(getSupportFragmentManager());
tFragment = new TitleFragment();
cFragment = new ContentFragment();
cFragment2 = new ContentFragment2();
// fragments.add(tFragment);
// fragments.add(cFragment);
// viewPager.setAdapter(adapter);
iv1.setOnClickListener(this);
iv2.setOnClickListener(this);
iv3.setOnClickListener(this);
}
class FragmentAdapter extends FragmentPagerAdapter {
public FragmentAdapter(FragmentManager fm) {
super(fm);
// TODO Auto-generated constructor stub
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return fragments.get(arg0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return fragments.size();
}
}
@Override
public void onClick(View v) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
switch(v.getId()) {
case R.id.imageView2:
// ft.remove(cFragment);
// ft.add(R.id.id_fragment_content, tFragment);
removeFragment();
ft.replace(R.id.id_fragment_content, tFragment);
break;
case R.id.imageView1:
// ft.remove(tFragment);
// ft.add(R.id.id_fragment_content, cFragment);
removeFragment();
ft.replace(R.id.id_fragment_content, cFragment);
break;
case R.id.imageView3:
removeFragment();
ft.replace(R.id.id_fragment_content, cFragment2);
break;
}
ft.commit();
}
private void removeFragment() {
FragmentManager fManager = getSupportFragmentManager();
FragmentTransaction transaction = fManager.beginTransaction();
transaction.remove(cFragment);
transaction.remove(cFragment2);
transaction.remove(tFragment);
}
}