- ExpandableListView二级菜单
- ViewPager、PagerAdapter viewPager+fragment
1.ExpandableListView二级菜单
完成一个ExpandableListView,很简单,二级选择,只需要准备三个东西:
(1)一级选择的布局//也就是父布局
(2)二级选择的布局//也就是子布局
(3 ExtendableListViewAdapter的自定义//也就是适配器的书写
先在activity布局里面写上ExpandableListView控件‘,再完成父布局(一级菜单布局)和子布局(二级菜单布局)
编写适配器继承BaseExpandableListAdapter
需要传进两组数据 一组为父布局数据,一组为子布局数据
private List<String> fList;//一级菜单数据
private List<String> sList; //二级菜单数据 //二级菜单数据
private LayoutInflater inflater;//布局加载器对象
构造函数
public ExLvAdapter(List<String> fList, List<List<String>> sList, Context context) {
this.fList = fList;
this.sList = sList;
this.inflater=LayoutInflater.from(context);
}
各个方法代表的意思:
@Override //获得父项的条目数
public int getGroupCount() {
return fList.size();
}
@Override //某个父项的子项的个数
public int getChildrenCount(int groupPosition) {
return sList.get(groupPosition).size();
}
@Override //获得某个父项
public Object getGroup(int groupPosition) {
return fList.get(groupPosition);
}
@Override //获得某个子项
public Object getChild(int groupPosition, int childPosition) {
return sList.get(groupPosition).get(childPosition);
}
@Override //父项的Id
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override //子项的Id
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override //获取父项的view
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=inflater.inflate(R.layout.exlv_father_layout,null);
}
TextView tv_fa=convertView.findViewById(R.id.tv_fa);
tv_fa.setText(fList.get(groupPosition));
return convertView;
}
@Override //获取子项的view
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if(convertView==null){
convertView=inflater.inflate(R.layout.exlv_son_layout,null);
}
TextView tv_fa=convertView.findViewById(R.id.tv_son);
tv_fa.setText(sList.get(groupPosition).get(childPosition));
return convertView;
}
@Override //子项是否可选中,如果要设置子项的点击事件,需要返回true
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
获取子项的点击事件:setOnChildClickListener
2.ViewPager微信滑动
Viewpager,视图翻页工具,提供了多页面切换的效果,ViewPager的基本用法:可以在ViewPager中加载一个ImageView,也可以加载一个Fragment。
//准备vierPager 和下面四个按钮
private ViewPager vp;
private ImageView v1;
private ImageView v2;
private ImageView v3;
private ImageView v4;
//准备fragment集合
List<Fragment> fList=new ArrayList<Fragment>();
//准备适配器
FragmentPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
setTab(0);
}
private void initView() {
vp=findViewById(R.id.vp);
v1=findViewById(R.id.v1);
v2=findViewById(R.id.v2);
v3=findViewById(R.id.v3);
v4=findViewById(R.id.v4);
v1.setOnClickListener(this);
v2.setOnClickListener(this);
v3.setOnClickListener(this);
v4.setOnClickListener(this);
initFragment();
//将fragment
adapter=new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int position) {
return fList.get(position);
}
@Override
public int getCount() {
return fList.size();
}
};
vp.setAdapter(adapter);
//设置滑动监听
vp. addOnPageChangeListener (new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// int currentItem=vp.getCurrentItem();
// setTab(currentItem);
setTab(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
//准备fragment集合
private void initFragment() {
Fragment1 fg1=new Fragment1();
Fragment2 fg2=new Fragment2();
Fragment3 fg3=new Fragment3();
Fragment4 fg4=new Fragment4();
fList.add(fg1);
fList.add(fg2);
fList.add(fg3);
fList.add(fg4);
}
private void resetView() {
//还原按钮
v1.setBackgroundColor(getResources().getColor(R.color.colorGray));
v2.setBackgroundColor(getResources().getColor(R.color.colorGray));
v3.setBackgroundColor(getResources().getColor(R.color.colorGray));
v4.setBackgroundColor(getResources().getColor(R.color.colorGray));
}
private void setTab(int i){
//按钮上色
resetView();
switch (i) {
case 0:
v1.setBackgroundColor(getResources().getColor(R.color.colorWhite));
break;
case 1:
v2.setBackgroundColor(getResources().getColor(R.color.colorWhite));
break;
case 2:
v3.setBackgroundColor(getResources().getColor(R.color.colorWhite));
break;
case 3:
v4.setBackgroundColor(getResources().getColor(R.color.colorWhite));
break;
}
}
public void Select(int i){
vp.setCurrentItem(i);
setTab(i);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.v1:
//点击按钮
Select(0);
break;
case R.id.v2:
Select(1);
break;
case R.id.v3:
Select(2);
break;
case R.id.v4:
Select(3);
break;
}
}