ViewPager+Fragment实现TabHost,Fragment动态添加、删除,Tab选项卡跟随滑动
生活随笔
收集整理的這篇文章主要介紹了
ViewPager+Fragment实现TabHost,Fragment动态添加、删除,Tab选项卡跟随滑动
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
效果圖:
代碼功能:
(1)用ViewPager+Fragment實現(xiàn)TabHost,ViewPager的每一個Page均是Fragment。ViewPager中的Fragment可以動態(tài)添加、刪除。底部的Tab選項卡點擊后選擇ViewPager中相應(yīng)的Fragment。
(2)ViewPager左右側(cè)滑時候,底部的Tab選項卡也跟隨相應(yīng)做出對應(yīng)的滑動。
MainActivity.java
import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentTransaction;public class MainActivity extends FragmentActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Fragment newFragment =new ViewPagerAndFragmentTabHost();FragmentTransaction transaction =getSupportFragmentManager().beginTransaction();transaction.replace(R.id.fragment,newFragment);transaction.commit();} }activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><FrameLayout android:id="@+id/fragment" android:layout_width="match_parent"android:layout_height="match_parent"> </FrameLayout></LinearLayout>重點是此類:ViewPagerAndFragmentTabHost.java 實現(xiàn)全部功能。
import java.util.ArrayList; import java.util.HashMap; import java.util.Random; import java.util.UUID;import com.example.viewpager_fragment.R;import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.view.Gravity; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView;public class ViewPagerAndFragmentTabHost extends Fragment {private MyFragmentPagerAdapter mPagerAdapter;private ViewPager mViewPager;private LinearLayout mLinearLayout;private ArrayList<HashMap<String, Object>> mArrayList = null;private final String FRAGMENT = "fragment_tag", TAB = "tab_tag",UUID_TAG = "uuid_tag";@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setHasOptionsMenu(true);mArrayList = new ArrayList<HashMap<String, Object>>();}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View mView = inflater.inflate(R.layout.viewpager_fragment, null);mViewPager = (ViewPager) mView.findViewById(R.id.viewpager);mLinearLayout = (LinearLayout) mView.findViewById(R.id.indicator_LinearLayout);mPagerAdapter = new MyFragmentPagerAdapter(getFragmentManager());mViewPager.setAdapter(mPagerAdapter);mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageSelected(int pos) {set(pos);}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}});// 初始化,在此,可選initialization();// 初始化選擇第一項if (mPagerAdapter.getCount() > 0) {set(0);}return mView;}private void initialization() {// 在這里做初始化工作,如果有指定的Fragment,在此預(yù)裝載// Fragment fragment;//創(chuàng)建一個Fragment// View view;//一個下方選項卡的View// add(fragment, view);}private void add(Fragment fragment, View indicatorView) {HashMap<String, Object> map = new HashMap<String, Object>();UUID uuid = UUID.randomUUID();map.put(UUID_TAG, uuid);Bundle args = new Bundle();fragment.setArguments(args);map.put(FRAGMENT, fragment);indicatorView.setBackgroundColor(Color.GRAY);LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT, 1);indicatorView.setTag(uuid);mLinearLayout.addView(indicatorView, params);indicatorView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {setIndicatorViewSelected(v);}});map.put(TAB, indicatorView);mArrayList.add(map);}private void setIndicatorViewSelected(View v) {UUID uuid = (UUID) v.getTag();for (int i = 0; i < mArrayList.size(); i++) {HashMap<String, Object> map = mArrayList.get(i);if (uuid == map.get(UUID_TAG)) {set(i);}}}private final void delete(int pos) {UUID uuid = (UUID) mArrayList.get(pos).get(UUID_TAG);View view = mLinearLayout.findViewWithTag(uuid);mLinearLayout.removeView(view);mArrayList.remove(pos);mPagerAdapter.notifyDataSetChanged();}private void setIndicatorViewSelectedColor(int pos) {for (int i = 0; i < mArrayList.size(); i++) {HashMap<String, Object> map = mArrayList.get(i);View view = (View) map.get(TAB);if (i == pos)view.setBackgroundColor(Color.RED);elseview.setBackgroundColor(Color.GRAY);}}private void set(int pos) {mViewPager.setCurrentItem(pos, true);setIndicatorViewSelectedColor(pos);}private class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {public MyFragmentPagerAdapter(FragmentManager fm) {super(fm);}@Overridepublic Fragment getItem(int pos) {return (Fragment) mArrayList.get(pos).get(FRAGMENT);}@Overridepublic int getItemPosition(Object object) {return FragmentPagerAdapter.POSITION_NONE;}@Overridepublic int getCount() {return mArrayList.size();}}private Fragment loadFragment() {return new TestFragment();}private View loadIndicatorView(int pos) {TextView tv = new TextView(getActivity());tv.setGravity(Gravity.CENTER);tv.setText("Tab " + pos);return tv;}protected void onActionAdd() {add(loadFragment(), loadIndicatorView(mPagerAdapter.getCount()));mPagerAdapter.notifyDataSetChanged();}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.action_add:onActionAdd();break;case R.id.action_dele:delete(mViewPager.getCurrentItem());set(mViewPager.getCurrentItem());break;default:break;}return super.onOptionsItemSelected(item);}@Overridepublic void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {inflater.inflate(R.menu.main, menu);}//// 僅僅用于測試的Fragment,在ViewPager中加載//public static class TestFragment extends Fragment {private final int seq = new Random().nextInt(20);@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {TextView tv = new TextView(getActivity());String str = "Fragment Seq : " + seq + "\n";for (int i = 0; i < 500; i++)str = str + i + "--";tv.setTextColor(Color.LTGRAY);tv.setText(str);return tv;}} }ViewPagerAndFragmentTabHost.java 需要的 viewpager_fragment.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><FrameLayout android:layout_weight="1"android:layout_width="match_parent"android:layout_height="match_parent" ><android.support.v4.view.ViewPagerandroid:id="@+id/viewpager"android:layout_width="match_parent"android:layout_height="match_parent" /></FrameLayout><LinearLayoutandroid:id="@+id/indicator_LinearLayout"android:layout_width="match_parent"android:layout_height="50dip"android:orientation="horizontal" ></LinearLayout></LinearLayout>res\menu\main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android" ><itemandroid:id="@+id/action_add"android:orderInCategory="100"android:showAsAction="never"android:title="添加"/><itemandroid:id="@+id/action_dele"android:orderInCategory="100"android:showAsAction="never"android:title="刪除"/> </menu> 總結(jié)
以上是生活随笔為你收集整理的ViewPager+Fragment实现TabHost,Fragment动态添加、删除,Tab选项卡跟随滑动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 圆角Button
- 下一篇: 中小企业应如何选择合适的数据保护工具?