最近在使用  DataBinding ,顺便弄下ViewPage +  Fragment 

直接上代码,先看DockerItem的代码

public class DockerItem {    public static enum ItemType{        Home,Classfy,Personal    }    ItemType type;    int iconRes;    int textRes;    public DockerItem(int textRes,int iconRes,ItemType type){        this.textRes = textRes;        this.iconRes = iconRes;        this.type = type;    }    public ItemType getType() {        return type;    }    public void setType(ItemType type) {        this.type = type;    }    public int getIconRes() {        return iconRes;    }    public void setIconRes(int iconRes) {        this.iconRes = iconRes;    }    public int getTextRes() {        return textRes;    }    public void setTextRes(int textRes) {        this.textRes = textRes;    }}


应该都明白什么意思吧,下面是item的布局


<?xml version="1.0" encoding="utf-8"?>                                        


Image就是底部docker的图片,textView是文字说明

下面到dockerBar dockerBar的代码有点多,比较适用


public class DockerBar extends LinearLayout{    DockerBarBinding mDockerBarBinding;    private OnItemClickListener mOnItemClickListener;    List mItems = new ArrayList<>();    public interface  OnItemClickListener{        void onItemClick(DockerBar dockerBar,DockerItem item);    }    public DockerBar(Context context) {        this(context,null);    }    public DockerBar(Context context, AttributeSet attrs) {        this(context, attrs,0);    }    public DockerBar(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        initViews();    }    public void setmOnItemClickListener(OnItemClickListener l){        mOnItemClickListener = l;    }    private void init(){        DockerItem item = new DockerItem(R.string.home,R.drawable.dockbar_home_selector,DockerItem.ItemType.Home);        mItems.add(item);        item = new DockerItem(R.string.classify,R.drawable.dockbar_classify_selector,DockerItem.ItemType.Classfy);        mItems.add(item);        item = new DockerItem(R.string.personal,R.drawable.dockbar_personal_selector,DockerItem.ItemType.Personal);        mItems.add(item);    }    private  void initViews(){        init();        LayoutInflater infaInflater = LayoutInflater.from(getContext());        System.out.print(infaInflater);        mDockerBarBinding = DataBindingUtil.inflate(infaInflater,R.layout.docker_bar,this,true);        mDockerBarBinding.dockerList.removeAllViews();        for (int i=0;i

注意,这个属于自定义的一个layout

dockerBar的XML布局文件如下:

<?xml version="1.0" encoding="utf-8"?>                                


public class FragAdapter extends FragmentPagerAdapter {    List mFragments = new ArrayList<>();    public FragAdapter(FragmentManager fm){        super(fm);        mFragments.add(new HomeFragment());        mFragments.add(new ClassifyFragment());        mFragments.add(new PersonalFragment());    }    @Override    public Fragment getItem(int position) {        return mFragments.get(position);    }    @Override    public int getCount() {        return mFragments.size();    }}


MainActivity 


public class MainActivity extends AppCompatActivity {    ActivityMainBinding mBinding;    FragAdapter mAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mBinding = DataBindingUtil.setContentView(this,R.layout.activity_main);        setupViews();    }    private void setupViews() {        mAdapter = new FragAdapter(getSupportFragmentManager());        mBinding.viewPager.setAdapter(mAdapter);        mBinding.viewPager.setOnPageChangeListener(mOnPageChangeListener);        mBinding.dockerBar.setmOnItemClickListener(mOnItemClickListener);    }    private ViewPager.OnPageChangeListener mOnPageChangeListener = new ViewPager.OnPageChangeListener() {        @Override        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {        }        @Override        public void onPageSelected(int position) {            mBinding.dockerBar.setSelection(position);        }        @Override        public void onPageScrollStateChanged(int state) {        }    };    private DockerBar.OnItemClickListener mOnItemClickListener = new DockerBar.OnItemClickListener() {        @Override        public void onItemClick(DockerBar dockerBar, DockerItem item) {            switch (item.getType()){                case Home:                    mBinding.viewPager.setCurrentItem(0,false);                    break;                case Classfy:                    mBinding.viewPager.setCurrentItem(1,false);                    break;                case Personal:                    mBinding.viewPager.setCurrentItem(2,false);                    break;            }        }    };}

XML 布局

<?xml version="1.0" encoding="utf-8"?>                            

又写了一个BaseFragment  

public class BaseFragment extends Fragment   {    protected ViewGroup mViewGroup;    protected Context mContext;    protected Activity mActivity;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mActivity = getActivity();        mContext = getActivity().getApplicationContext();    }    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        return mViewGroup;    }    public void onResume() {        super.onResume();    }    public void onPause() {        super.onPause();    }}


最后就是一个简单的Fragment 了继承Base

public class HomeFragment extends BaseFragment   {    private static final String TAG = "HomeFragment";    @Override    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {        if (mViewGroup == null) {            HomeFragmentBinding binding = HomeFragmentBinding.inflate(inflater, null, false);            mViewGroup = (ViewGroup) binding.getRoot();        }        return super.onCreateView(inflater, container, savedInstanceState);    }}

布局

<?xml version="1.0" encoding="utf-8"?>                                

大概就是这些了,欢迎大家指正!

源码下载:http://download.csdn.net/detail/zmadmad/9500247

更多相关文章

  1. android 网络连接 HttpGet HttpPost方法
  2. 关于 android AES 部分机器 javax.crypto.BadPaddingException:
  3. Android添加room依赖的正确姿势(附带完整流程)
  4. Android(安卓)强制竖屏
  5. android 传递图片和图片与byte的转换
  6. Android(安卓)dialog 对话框自定义布局
  7. 收集到的Android开源代码
  8. Android(安卓)JNI技术, NDK开发
  9. Android学习笔记:TabHost 和 FragmentTabHost

随机推荐

  1. Uncaught Error: Error calling method o
  2. Android NFC 对sim卡读写注意事项
  3. android 视频播放器 android videoView
  4. 解决windows下eclipse中android项目关联a
  5. Android(安卓)API 中提供的20个服务
  6. 谈谈android数据存储方式
  7. Android 系统权限之SuperSU 模拟器root
  8. 【Android Training - 04】保存数据 [ Le
  9. Android(安卓)SDK 在线更新镜像服务器资
  10. Android(安卓)7.0 之后抓包 Charles 手机