玩Android项目开发9-----公众号页面(垂直TabLayout + RecyclerView联动)

在玩美团或者淘宝APP时,肯定有见过这样的页面,垂直方向上的TabLayout,点击每个Tab就切换到对应的页面。
在这里插入图片描述
在项目中,先引进垂直TabLayout依赖。

implementation 'q.rorbin:VerticalTabLayout:1.2.5'

使用和之前的TabLayout一样,直接上布局吧。

<include android:id="@+id/wechat_title" layout="@layout/title"></include>
    <q.rorbin.verticaltablayout.VerticalTabLayout
        android:id="@+id/vt_table"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_below="@id/wechat_title"
        app:tab_mode="scrollable"
        app:tab_height="40dp"
        app:indicator_gravity="left"
        app:indicator_color="@color/colorRed"
        ></q.rorbin.verticaltablayout.VerticalTabLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rv_wechat"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/wechat_title"
        android:layout_toRightOf="@id/vt_table"
        android:layout_marginBottom="70dp"
        ></androidx.recyclerview.widget.RecyclerView>

在之前TabLayout时,设置Tab的标题时,使用TabLayoutMedicator,在使用垂直TabLayout时,是通过TabAdapter设置。

public interface TabAdapter {
    int getCount();

    TabView.TabBadge getBadge(int position);

    TabView.TabIcon getIcon(int position);

    TabView.TabTitle getTitle(int position);

    int getBackground(int position);
}
public class WeChatTabAdapter implements TabAdapter {
    private final Context context;
    private final List<WechatBean.DataBean> data;

    public WeChatTabAdapter(Context context, List<WechatBean.DataBean> data){
        this.context = context;
        this.data =data;
    }
    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public ITabView.TabBadge getBadge(int position) {
        return null;
    }

    @Override
    public ITabView.TabIcon getIcon(int position) {
        return null;
    }

    @Override
    public ITabView.TabTitle getTitle(int position) {
        return new QTabView.TabTitle.Builder()
                .setContent(data.get(position).getName())
                .setTextSize(15)
                .build();
    }

    @Override
    public int getBackground(int position) {
        return R.color.colorDark;
    }
}

通过getTitle方法去设置Title
在这里插入图片描述
然后用户通过点击Tab,来切换RecyclerView的内容;调用addOnTabSelectedListener,在点击Tab的时候,来获取数据,然后将数据设置RecyclerView界面。

 @Override
    public void showWeChatData(List<WechatBean.DataBean> data) {
        tabAdapter = new WeChatTabAdapter(getContext(),data);
        vt_table.setTabAdapter(tabAdapter);

        //设置监听
        vt_table.addOnTabSelectedListener(new TabSelectedListener(data));

    }

    private class TabSelectedListener implements VerticalTabLayout.OnTabSelectedListener {
        private final List<WechatBean.DataBean> data;

        public TabSelectedListener(List<WechatBean.DataBean> data) {
            this.data = data;
        }

        @Override
        public void onTabSelected(TabView tab, int position) {

            int id = data.get(position).getId();
            fPresenter.getWeChatById(id,1);
        }

        @Override
        public void onTabReselected(TabView tab, int position) {

        }
    }

在这里插入图片描述
但是这里出现一个问题,当我们刚进入公众号界面的时候,因为第一个Tab是默认选择的,内容并没有显示出来,但是在点击其他Tab,再切换到第一个Tab,内容就显示出来了,这个原因就是因为,我们在设置监听时addOnTabSelectedListener,当我们选择时,才会请求获取数据。

在这里插入图片描述
在这里插入图片描述
所以在加载布局的 时候,就需要获取哪个position被默认点击了,然后在设置数据的时候,就默认先加载数据。

selectedTabPosition = vt_table.getSelectedTabPosition();

//刚进去就设置数据
int id = data.get(selectedTabPosition).getId();
fPresenter.getWeChatById(id,1);

这样问题就解决了。

2、在某个公众号内搜索该公众号的内容

<androidx.appcompat.widget.SearchView
        android:id="@+id/sv_wechat"
        android:layout_width="250dp"
        android:layout_height="40dp"
        app:queryHint="请输入关键字"
        app:iconifiedByDefault="false"
        android:background="@drawable/project_bg"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:imeOptions="actionSearch"
        ></androidx.appcompat.widget.SearchView>

还是通过SearchView来实现

sv_wechat.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                // request data
                mPresenter.getInfoByKey(id,1,query);
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });

在搜索框中,输入要查找的关键字,然后请求数据,跳转到查询结果的页面。

 @Override
    public void getSearchData(WeChatItemData.DataBean data) {
        Intent intent = new Intent();
        List<WeChatItemData.DataBean.DatasBean> datas = data.getDatas();
        intent.putExtra("data", (Serializable) datas);
        intent.setClass(WetChatSearchActivity.this,WetChatSearchInfoActivity.class);
        startActivity(intent);
    }

在“Android群英传”的公众号中,搜索“Android”关键字,然后显示查询结果。
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Awesome_lay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值