RecyclerView告別低級(jí)的ListView苹熏,實(shí)現(xiàn)橫向滾動(dòng)列表(二)

引言

??不知道列位看新聞都用什么軟件?今日頭條船惨?還是新浪新聞柜裸?現(xiàn)如今很多的app都采用橫向的tab來(lái)進(jìn)行分類(lèi),可以滾動(dòng)和滑動(dòng)粱锐,上一篇我們使用RecyclerView實(shí)現(xiàn)了類(lèi)似ListView的瀑布流布局疙挺。

??本期,讓我們一起來(lái)學(xué)習(xí)如何用RecyclerView實(shí)現(xiàn)橫向列表滾動(dòng)怜浅,它來(lái)了它來(lái)了——它帶著橫向布局走來(lái)了铐然!

傳送門(mén)

回顧上一篇—>?RecyclerView實(shí)現(xiàn)瀑布流布局(類(lèi)似ListView)

RecycylerView與ListView的區(qū)別也請(qǐng)走傳送門(mén)!

介紹

本期主題:【使用RecycleView實(shí)現(xiàn)橫向布局】

Tips:之前看的很多博客系列版的都是需要在上一篇的基礎(chǔ)上改恶座,如果系列的篇幅過(guò)多搀暑,就顯得很是冗余,而且代碼不獨(dú)立往往需要從頭看起跨琳,所以我想要將功能獨(dú)立出來(lái)自点,使得每篇博客的代碼都能獨(dú)立編譯,因此每個(gè)功能我都會(huì)將完整的代碼貼出來(lái)脉让,以遍我們一起學(xué)習(xí)和交流桂敛。

此外功炮,我會(huì)在最后的解析中區(qū)別本期與前期,對(duì)改動(dòng)作出解析术唬。

用法

第一步:添加相關(guān)依賴(lài)(app下build.gradle)

//RecyclerView
implementation 'com.android.support:recyclerview-v7:27.1.1'

第二步:布局文件

(1)主布局:activity的xml文件

<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:layout_height="match_parent"
    tools:context=".blog.Case21"
    android:orientation="vertical">
    <androidx.appcompat.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:title="Recyclerview橫向示例"
        app:titleTextColor="@color/white"
        android:background="@color/green"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

(2)子布局:R.layout.case7_item_hor_fruit.xml

形式:上邊圖片 + 下邊文字

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:background="@color/white"
        android:orientation="vertical"
        android:padding="10dp"
        tools:ignore="MissingConstraints">

        <ImageView
            android:id="@+id/fruit_hor_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            tools:ignore="MissingConstraints" />

        <TextView
            android:id="@+id/fruit_hor_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:gravity="center"
            android:textColor="@color/black"
            tools:ignore="MissingConstraints" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

第三步:創(chuàng)建實(shí)體類(lèi)Fruit(為RecyclerView填充數(shù)據(jù)使用)

/**
 * @data on 2020/8/27 9:47 PM
 * @auther  ArmStrong
 * @describe  
 */
public class Fruit {
    private String name;
    private int imageId;

    public Fruit(String name, int imageId) {
        this.name = name;
        this.imageId = imageId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
}

第四步:創(chuàng)建RecyclerView的適配器類(lèi)

/**
 * @data on 2020/8/29 11:17 AM
 * @auther
 * @describe
 */
public class FruitHorRecyclerVIewAdapter extends RecyclerView.Adapter<FruitHorRecyclerVIewAdapter.MyViewHolder>{
    private List<Fruit> fruitList;


    public FruitHorRecyclerVIewAdapter(List<Fruit> fruitList) {
        this.fruitList = fruitList;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.case7_item_hor_fruit,parent,false);
        final MyViewHolder myViewHolder = new MyViewHolder(itemView);
        return myViewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        Fruit horItem = fruitList.get(position);
        holder.fruitHorImage.setImageResource(horItem.getImageId());
        holder.fruitHorName.setText(horItem.getName());
        holder.fruitView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int positon = holder.getAdapterPosition();
                Fruit fruit = fruitList.get(positon);
                Toast.makeText(v.getContext(),"hor:"+"你點(diǎn)擊了"+fruit.getName(),Toast.LENGTH_SHORT).show();
            }
        });
    }
    public static class MyViewHolder extends RecyclerView.ViewHolder{
        View fruitView;

        //圖片
        public ImageView fruitHorImage;
        //標(biāo)題
        public TextView fruitHorName;

        public MyViewHolder(View itemView) {
            super(itemView);
            fruitView = itemView;
            fruitHorImage = itemView.findViewById(R.id.fruit_hor_image);
            fruitHorName = itemView.findViewById(R.id.fruit_hor_name);
        }
    }

    @Override
    public int getItemCount() {
        return fruitList.size();
    }
}

第五步:Activity中為控件綁定適配器類(lèi)

public class Case21 extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private FruitHorRecyclerVIewAdapter adapter;
    private LinearLayoutManager layoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_case21);
        mRecyclerView = findViewById(R.id.recyclerView);

        //RecyclerView填充數(shù)據(jù)
        List<Fruit> mList = new ArrayList();
        for ( int i=1 ; i<20 ; i++){
            mList.add(new Fruit("apple"+i,R.mipmap.apple));
        }

        //橫向滑動(dòng)布局
        adapter = new FruitHorRecyclerVIewAdapter(mList);
        layoutManager = new LinearLayoutManager(this);
        layoutManager.setOrientation(RecyclerView.HORIZONTAL);
        mRecyclerView.setLayoutManager(layoutManager);
        mRecyclerView.setAdapter(adapter);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
    }
}

運(yùn)行效果

本期效果:

RecyclerView橫向布局.gif

解析

(1)布局管理器設(shè)置

??需要指定布局管理器LinearLayoutManager為
RecyclerView.HORIZONTAL薪伏,而且要注意先于setAdapte之前設(shè)置,否則RecyclerView將報(bào)錯(cuò),無(wú)法正常顯示粗仓。這是因?yàn)椴季止芾硇枰戎付ǚ较蚣藁常较驅(qū)α烁墒驴欤駝t事倍功半借浊!甚至功敗垂成塘淑!

layoutManager.setOrientation(RecyclerView.HORIZONTAL);

(2)子布局layout_item.xml改動(dòng)

需要重新設(shè)置item的布局,從之前的“左圖+右字”——>“上圖+下字”巴碗。


千夜零一:"之前總是看各種博客學(xué)習(xí)東西朴爬,現(xiàn)在我想用博客記錄下我的學(xué)習(xí)腳步,好東西也需要分享橡淆,索取和給予是相互的召噩。以后會(huì)盡量日更的!目標(biāo)完成1001篇博客哈哈逸爵【叩危”

??如果覺(jué)得對(duì)你有所幫助,請(qǐng)不要吝嗇你的點(diǎn)贊师倔,有問(wèn)題也可以在下方評(píng)論區(qū)留言哦构韵,關(guān)注我一起學(xué)習(xí)吧~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市趋艘,隨后出現(xiàn)的幾起案子疲恢,更是在濱河造成了極大的恐慌,老刑警劉巖瓷胧,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件显拳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡搓萧,警方通過(guò)查閱死者的電腦和手機(jī)杂数,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘸洛,“玉大人揍移,你說(shuō)我怎么就攤上這事》蠢撸” “怎么了那伐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我喧锦,道長(zhǎng)读规,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任燃少,我火速辦了婚禮,結(jié)果婚禮上铃在,老公的妹妹穿的比我還像新娘阵具。我一直安慰自己,他們只是感情好定铜,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布阳液。 她就那樣靜靜地躺著,像睡著了一般揣炕。 火紅的嫁衣襯著肌膚如雪帘皿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天畸陡,我揣著相機(jī)與錄音鹰溜,去河邊找鬼。 笑死丁恭,一個(gè)胖子當(dāng)著我的面吹牛曹动,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牲览,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼墓陈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了第献?” 一聲冷哼從身側(cè)響起贡必,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庸毫,沒(méi)想到半個(gè)月后仔拟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岔绸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年理逊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盒揉。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晋被,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刚盈,到底是詐尸還是另有隱情羡洛,我是刑警寧澤,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站欲侮,受9級(jí)特大地震影響崭闲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜威蕉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一刁俭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧韧涨,春花似錦牍戚、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至娩贷,卻和暖如春第晰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背彬祖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工茁瘦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涧至。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓腹躁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親南蓬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纺非,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354