我的专高一—Day07

目录

Fragment+ViewPager+TabLayout

Fragment

ViewPager

TabLayout

如何使用

1、完成TabLayout

2、首先让TabLayout和ViewPager绑定在一起

3、点击TabLayout,切换ViewPager

4、把Fragmnet和ViewPager绑定

FragmentPagerAdapter方法

案例

 直接上代码

首先导入依赖 :implementation 'com.android.support:design:28.0.0'

Actiity页面布局

核心代码(方法)

MainAtivity代码

适配器代码,MyFragmentAdapter.java

Fragment创建一个空白页面里面代码

Banner效果

实现效果:第一步(依赖起手):

第二步:编写布局

第三步:创建Banner对象,设置属性

EventBus

为什么使用EventBus

EventBus的三个角色

EventBus的线程模式

EventBus的应用


Fragment

把页面分为多个部分,提高页面利用率

ViewPager

实现视图左右滑动效果

TabLayout

可以实现滑动效果的标题栏,灵活多变

如何使用

1、完成TabLayout

 //添加控件
<android.support.design.widget.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent" />
//初始化
tabLayout.addTab(tabLayout.newTab().setText(tab));
//监听事件
tabLayout.addOnTabSelectedListener(this);

2、首先让TabLayout和ViewPager绑定在一起

//添加viewpager控件
tabLayout.setupWithViewPager(viewPager);

3、点击TabLayout,切换ViewPager

@Override
    public void onTabSelected(TabLayout.Tab tab) {
        viewPager.setCurrentItem(tab.getPosition());
    }

4、把Fragmnet和ViewPager绑定

//通过FragmentPagerAdapter 适配器,把Fragment作为数据填入到ViewPager中
public class MyPagerAdapter extends FragmentPagerAdapter {
//重写方法
}

FragmentPagerAdapter方法

1、getltem()获得每个item 2、getPagerTitle()获取每一页的标题 3、getcount()获取数据的个数 4、MyPagerAdapter()有参构造方法

案例

 直接上代码

首先导入依赖 :implementation 'com.android.support:design:28.0.0'

Actiity页面布局

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_id"
        app:tabSelectedTextColor="#E5AF35"
        app:tabTextColor="#969696"
        app:tabIndicatorColor="#E5AF35"
        app:tabIndicatorHeight="5dp"
        app:tabMode="scrollable"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp">
    </android.support.design.widget.TabLayout>
  <android.support.v4.view.ViewPager
        android:id="@+id/vp_id"
        android:layout_weight="8"
        android:layout_width="match_parent"
        android:layout_height="0dp">

    </android.support.v4.view.ViewPager></LinearLayout>

核心代码(方法)

MainAtivity代码

public class MainActivity extends AppCompatActivity {
    private TabLayout tabId;
    private ViewPager vpId;
    private List<Fragment> list = new ArrayList<>();
    private List<String> titles = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        tabId = findViewById(R.id.tab_id);
        vpId = findViewById(R.id.vp_id);
        list.add(new OneFragment());
        list.add(new TwoFragment());
        list.add(new OneFragment());
        list.add(new TwoFragment());
        titles.add("视频");
        titles.add("新闻");
        titles.add("图片");
        titles.add("留言");
         MyFragmentAdapter myFragmentAdapter = new MyFragmentAdapter(getSupportFragmentManager(), list, titles);
        vpId.setAdapter(myFragmentAdapter);

        //把viewPager和tabLayout绑定在一起,注释掉看看效果.
        tabId.setupWithViewPager(vpId);

适配器代码,MyFragmentAdapter.java

public class MyFragmentAdapter extends FragmentStatePagerAdapter {
    private List<Fragment> list;
    private List<String> titles;
    public MyFragmentAdapter(FragmentManager fm, List<Fragment> list, List<String> titles) {
        super(fm);
        this.list = list;
        this.titles = titles;
    }
    @Override
    public int getCount() {
        return list.size();
    }
    @Override
    public Fragment getItem(int i) {
        return list.get(i);
    }
 @Override
    public CharSequence getPageTitle(int position) {
        return titles.get(position);
    }} 

Fragment创建一个空白页面里面代码

public class OneFragment extends Fragment {
    public OneFragment() {
        // Required empty public constructor
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_one, container, false);
    }}

Banner效果

实现效果:第一步(依赖起手):

 implementation 'com.github.bumptech.glide:glide:3.7.0'    

implementation 'com.youth.banner:banner:1.4.9‘

第二步:编写布局

<com.youth.banner.Banner
        android:id="@+id/banner"
        android:layout_width="match_parent"
        android:layout_height="200dp">

    </com.youth.banner.Banner>

第三步:创建Banner对象,设置属性

public class MainActivity extends AppCompatActivity implements OnBannerListener {
	private Banner banner;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		banner = findViewById(R.id.banner);//一定要布局文件之后获取ID
		List<Integer> imageList = new ArrayList<>();
		int[] imageIDs = new int[]{R.drawable.gao, R.drawable.yun, R.drawable.img1};
		List<String> nameList = new ArrayList<>();
		String[] names = new String[]{"1", "2", "3", "4"};
		imageList.add(imageIDs[0]);
		imageList.add(imageIDs[1]);
		imageList.add(imageIDs[2]);
		nameList.add(names[0]);
		nameList.add(names[1]);
		nameList.add(names[2]);
banner.setBannerStyle(BannerConfig.CIRCLE_INDICATOR_TITLE_INSIDE);
		//圆点指示器(标题inside)
		banner.setBannerTitles(nameList);
		banner.setImages(imageList);

		banner.setImageLoader(new MyLoader());
		//设置图片加载器
		banner.setBannerAnimation(Transformer.FlipHorizontal);
		//动画

		banner.setOnBannerListener(this);
		//点击图片事件
		banner.setDelayTime(1000);
		banner.isAutoPlay(true);
		banner.setIndicatorGravity(BannerConfig.CENTER);
		banner.start();
	}

EventBus

为什么使用EventBus

EventBus的三个角色

EventBus的线程模式

EventBus的应用

1、依赖起手

implementation 'org.greenrobot:eventbus:3.1.1'

2、定义事件

public class MessageWrap {

    public final String message;

    public static MessageWrap getInstance(String message) {
        return new MessageWrap(message);
    }

    private MessageWrap(String message) {
        this.message = message;
    }
}

3、发布事件

@Route(path = BaseConstants.LIBRARY_EVENT_BUS_ACTIVITY1)
public class EventBusActivity1 extends CommonActivity<ActivityEventBus1Binding> {

    @Override
    protected void doCreateView(Bundle savedInstanceState) {
        // 为按钮添加添加单击事件
        getBinding().btnReg.setOnClickListener(v -> EventBus.getDefault().register(this));
        getBinding().btnNav2.setOnClickListener( v ->
                ARouter.getInstance()
                        .build(BaseConstants.LIBRARY_EVENT_BUS_ACTIVITY2)
                        .navigation());
    }
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onGetMessage(MessageWrap message) {
        getBinding().tvMessage.setText(message.message);
    }
}

4、Activity中注册监听黏性事件

	@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onGetStickyEvent(MessageWrap message) {
    String txt = "Sticky event: " + message.message;
    getBinding().tvStickyMessage.setText(txt);
}

5、发布黏性事件

	private void publishStickyontent() {
    String msg = getBinding().etMessage.getText().toString();
    EventBus.getDefault().postSticky(MessageWrap.getInstance(msg));
    ToastUtils.makeToast("Published : " + msg);
}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值