1. 程式人生 > >使用Recyclerview實現線性佈局和網格佈局資料展示

使用Recyclerview實現線性佈局和網格佈局資料展示

         效果實現圖

使用的依賴和許可權

implementation 'com.facebook.fresco:fresco:0.12.0'
implementation 'com.squareup.okhttp3:okhttp:3.4.2'
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'
<uses-permission 
android:name="android.permission.INTERNET"/>
activity_questions
<?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:layout_height="match_parent" android:orientation="vertical" tools:context=".QuestionsActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="0dp" android:layout_weight=
"1" android:layout_height="wrap_content" android:text="線性佈局" android:id="@+id/ll"/> <Button android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="表格佈局" android:id="@+id/bg"/> </LinearLayout> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/rlv"/> </LinearLayout>
item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
    <com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="300dp" />

    <LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
        <TextView
android:id="@+id/textView"
android:textSize="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="商品資訊:" />
        <TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="tv" />
        <LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
            <TextView
android:id="@+id/textView2"
android:textSize="20dp"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="價格:" />
            <TextView
android:id="@+id/tv2"
android:textSize="20dp"
android:textColor="#f00"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="tv2" />
        </LinearLayout>
    </LinearLayout>
</LinearLayout>

QuestionsActivity

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;

import com.bwie.test.adapter.RecyclerviewAdapter;
import com.bwie.test.bean.Bean;
import com.google.gson.Gson;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class QuestionsActivity extends AppCompatActivity implements View.OnClickListener{
    private static final int SUCCESS = 492;
    List<Bean.JsonBean> datas = new ArrayList<>();
    String path = "http://p6acqdvet.bkt.clouddn.com/_data_json.json";
    Handler handler = new Handler() {
        @Override
public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case SUCCESS:
                    String tvv = (String) msg.obj;
                    Gson gson = new Gson();
                    Bean bean = gson.fromJson(tvv, Bean.class);
                    List<Bean.JsonBean> data = bean.getJson();
                    datas.addAll(data);
            }
        }
    };
    private RecyclerviewAdapter adapter;
    private RecyclerView mRlv;
    private Button ll;
    private Button bg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_questions);
        //隱藏原有標題
getSupportActionBar().hide();
        initadd();//初始化
getOk();
    }

    private void initadd() {
        mRlv = (RecyclerView) findViewById(R.id.rlv);
        ll = findViewById(R.id.ll);//線性佈局
bg = findViewById(R.id.bg);//表格佈局
        //按鈕的監聽
ll.setOnClickListener(this);
        bg.setOnClickListener(this);
    }

    @Override
public void onClick(View v) {
        switch (v.getId()){
            case R.id.ll:
                //線性佈局管理器
mRlv.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
                setadapter();
                break;
            case R.id.bg:
                //表格佈局管理器
mRlv.setLayoutManager(new GridLayoutManager(this,2));
                setadapter();
                break;
        }
    }

    private void setadapter() {
        adapter = new RecyclerviewAdapter(this, datas);
        mRlv.setAdapter(adapter);
        adapter.SetOnItemClickListener(new RecyclerviewAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(int position) {
                adapter.swipe(position);
            }
        });
    }

    private void getOk() {
        new Thread() {
            @Override
            public void run() {
                super.run();
                //請求網路得到相應物件
OkHttpClient client = new OkHttpClient.Builder().build();
                Request request = new Request.Builder().url(path).build();
                try {
                    Response response = client.newCall(request).execute();
                    //得到資料並轉型
String s = response.body().string();
                    //更新UI不能在子執行緒中,使用Handler
Message message = handler.obtainMessage();
                    message.obj = s;
                    message.what = SUCCESS;
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
        return;
    }
}

app資料夾下MyApp

import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;

public class MyApplication extends Application{
    @Override
public void onCreate() {
        super.onCreate();
        //初始化fresco
Fresco.initialize(this);
    }
}

inter資料夾下ItemTouchCallBack

import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.helper.ItemTouchHelper;
import com.bwie.test.adapter.RecyclerviewAdapter;

public class ItemTouchCallBack extends ItemTouchHelper.Callback{
    private RecyclerviewAdapter myAdapter;

    public ItemTouchCallBack(RecyclerviewAdapter myAdapter) {
        this.myAdapter = myAdapter;
    }

    /**
     * 獲取移動的標記  移動和刪除
     * @param recyclerView
* @param viewHolder
* @return
*/
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        //設定移動的標記
int dragFlag=ItemTouchHelper.UP|ItemTouchHelper.DOWN|ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT;
        //設定刪除的標記
int swipFlag=ItemTouchHelper.LEFT|ItemTouchHelper.RIGHT;
        //製作兩種標記
int i = ItemTouchHelper.Callback.makeMovementFlags(dragFlag, swipFlag);
        return i;
    }

    /**
     * @param recyclerView
* @param viewHolder   原先的viewHolder
     * @param target       拖動後的viewHolder
     * @return
*/
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, 
                                           RecyclerView.ViewHolder target) {
        //切換位置
int oldPosition = viewHolder.getAdapterPosition();
        int newPosition = target.getAdapterPosition();
        //交換位置--
myAdapter.onMove(oldPosition,newPosition);
        return true;
    }

    /**
     * 左右移動
     * @param viewHolder
* @param direction
*/
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        int adapterPosition = viewHolder.getAdapterPosition();
        myAdapter.swipe(adapterPosition);
    }
}

MoveSwipeListener

public interface MoveSwipeListener {
    void onMove(int oldPosition, int newPosition);
    void swipe(int position);
}

adapter資料夾下RecyclerviewAdapter

import android.content.Context;
import android.content.DialogInterface;
import android.net.Uri;
import android.support.annotation.NonNull;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.bwie.test.bean.Bean;
import com.bwie.test.inter.MoveSwipeListener;
import com.bwie.test.mytestquestions.R;
import java.util.List;

public class RecyclerviewAdapter extends RecyclerView.Adapter implements MoveSwipeListener{
    private Context context;
    private List<Bean.JsonBean> datas;
    private OnItemClickListener onItemClickListener;

    public RecyclerviewAdapter(Context context, List<Bean.JsonBean> datas) {
        this.context = context;
        this.datas = datas;
    }

    @NonNull
    @Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LinearLayout.inflate(context, R.layout.item, null);
        MyViewHolder vh = new MyViewHolder(view);
        return vh;
    }

    @Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder,final int position) {
        MyViewHolder vh = (MyViewHolder) holder;
        vh.tv.setText(datas.get(position).getName());
        vh.tv2.setText(datas.get(position).getAgio());
        vh.iv.setImageURI(Uri.parse(datas.get(position).getImage()));
//        ImageLoader.getInstance().displayImage(datas.get(position).getImage(),vh.iv, 
        //  ImageloaderUtil.getImageOptions());
//        final String picUrl = datas.get(position).getImage();
//        final Uri uri = Uri.parse(picUrl);
//        vh.iv.setImageURI(uri);
vh.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
public void onClick(View v) {
                if (onItemClickListener != null){
                    onItemClickListener.onItemClick(position);
                }

                /**
                 * 點選條目刪除
                 */
AlertDialog.Builder builder = new AlertDialog.Builder(context);
                builder.setIcon(R.mipmap.ic_launcher);
                builder.setTitle("我是對話方塊");
                builder.setMessage("我是對話方塊的內容");
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(context, "點選了取消按鈕", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                    }
                });
                builder.setPositiveButton("確定", new DialogInterface.OnClickListener() {
                    @Override
public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(context, "點選了確定的按鈕", Toast.LENGTH_SHORT).show();
                        dialog.dismiss();
                        //移除資料
datas.remove(position);
                        //條目重新整理
notifyDataSetChanged();
                    }
                });
                AlertDialog dialog = builder.create();
                dialog.show();
            }
        });
    }

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

    @Override
public void onMove(int oldPosition, int newPosition) {
    }

    @Override
public void swipe(int position) {
    }

    public interface OnItemClickListener {
        void onItemClick(int position);
    }

    public void SetOnItemClickListener(OnItemClickListener onItemClickListener){
        this.onItemClickListener = onItemClickListener;
    }

    private class MyViewHolder extends  RecyclerView.ViewHolder {
        private final ImageView iv;
        private final TextView tv;
        private final TextView tv2;
        public MyViewHolder(View itemView) {
            super(itemView);
            iv = itemView.findViewById(R.id.iv);
            tv = itemView.findViewById(R.id.tv);
            tv2 = itemView.findViewById(R.id.tv2);
        }
    }
}

bean資料夾下Bean

import java.util.List;

public class Bean {
    private List<JsonBean> json;
    private List<LikeBean> like;
    public List<JsonBean> getJson() {
        return json;
    }
    public void setJson(List<JsonBean> json) {
        this.json = json;
    }
    public List<LikeBean> getLike() {
        return like;
    }
    public void setLike(List<LikeBean> like) {
        this.like = like;
    }
    public static class JsonBean {private int id;
        private String image;
        private String name;
        private String price;
        private String agio;
        private String amount;
        private String chart;
        private List<SwiperBean> swiper;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getImage() {
            return image;
        }
        public void setImage(String image) {
            this.image = image;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPrice() {
            return price;
        }
        public void setPrice(String price) {
            this.price = price;
        }
        public String getAgio() {
            return agio;
        }
        public void setAgio(String agio) {
            this.agio = agio;
        }
        public String getAmount() {
            return amount;
        }
        public void setAmount(String amount) {
            this.amount = amount;
        }
        public String getChart() {
            return chart;
        }
        public void setChart(String chart) {
            this.chart = chart;
        }
        public List<SwiperBean> getSwiper() {
            return swiper;
        }
        public void setSwiper(List<SwiperBean> swiper) {
            this.swiper = swiper;
        }
        public static class SwiperBean {
            private String img;
            public String getImg() {
                return img;
            }
            public void setImg(String img) {
                this.img = img;
            }
        }
    }
    public static class LikeBean {private int id;
        private String image;
        private String name;
        private String price;
        private String amount;
        private String chart;
        private List<SwiperBeanX> swiper;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getImage() {
            return image;
        }
        public void setImage(String image) {
            this.image = image;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPrice() {
            return price;
        }
        public void setPrice(String price) {
            this.price = price;
        }
        public String getAmount() {
            return amount;
        }
        public void setAmount(String amount) {
            this.amount = amount;
        }
        public String getChart() {
            return chart;
        }
        public void setChart(String chart) {
            this.chart = chart;
        }
        public List<SwiperBeanX> getSwiper() {
            return swiper;
        }
        public void setSwiper(List<SwiperBeanX> swiper) {
            this.swiper = swiper;
        }
        public static class SwiperBeanX {private String img;
            public String getImg() {
                return img;
            }
            public void setImg(String img) {
                this.img = img;
            }
        }
    }
}

相關推薦

使用Recyclerview實現線性佈局網格佈局資料展示

         效果實現圖使用的依賴和許可權implementation 'com.facebook.fresco:fresco:0.12.0' implementation 'com.squareup.okhttp3:okhttp:3.4.2' implementatio

Android相對佈局網格佈局

案例一:相對佈局 相對佈局(重點) 1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的,因此叫相對佈局 1.2 如果A元件位置是由B元件的位置決定的,Android要求先定B元件,再定義A元件 注1:注意XML中元件的順序,不然會報錯 注2:

android的相對佈局網格佈局

案例一:相對佈局 相對佈局(重點) 1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的,因此叫相對佈局 1.2 如果A元件位置是由B元件的位置決定的,Android要求先定B元件,再定義A元件 如果A元件位置是由B元件的位置決定的,Android要求先定

Android佈局2(相對佈局網格佈局

1. 相對佈局(RelativeLayout 重點:)   1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的(就是根據旁邊的足跡來設定位置),因此叫相對佈局   1.2 如果A元件位置是由B元件的位置決定的,Android要求先定B元件,再定義A元件  

CSS 商品的列表佈局網格佈局的切換

最近做的一個專案是需要商品不同的形式排列,一開始使用的是a標籤直接跳轉到另一個頁面,後來發現可以用在同一個頁面切換class實現,下面看下我是如何實現的因為兩種頁面展示的資料都是一樣的,看下效果圖先寫好兩個不同的css佈局:我這裡使用的是scss,只有最外層的樣式名稱不一樣,

線性網格佈局的裝換

網格和線性佈局的配置MainActivity haun.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View

Android線性佈局相對佈局的詳解區別

一、線性佈局(LinearLayout) 線性佈局:線性佈局是我們在開發中最常見的佈局方式之一,線性佈局可以分為水平線性佈局和垂直線性佈局這兩種佈局方式 線性佈局的屬性(決定佈局中元素的位置和佈局): android:layout_gravity ( 是本元素相對於父元素的

android的線性佈局佈局的入門

什麼是佈局 就是把介面中的控制元件按照某種規律擺放到指定的位置 佈局的二種實現 程式碼 xml配置檔案:res/layout目錄下 注:也可以同時使用xml和程式碼 佈局的基本屬性 取值範圍 { //效果是一樣的 fill_parent//過時 match_pa

RecyclerView 新增head view頭部 foot view尾部、設定水平horizontal時左側佈局右側佈局

折騰一下午,遇到若干問題:如,設定水平HORIZONTAL時,佔用多個跨度(類似單元格的合併) 終於都好用了。。。 簡陋圖發6張。 LinearLayoutManager.VERTICAL LinearLayoutManager.HORIZONTAL

佈局管理☞網格佈局管理器

網格佈局管理不同於表格佈局管理 網格佈局更具有靈活           三個屬性 columncount cowcount oretional 分別為 最大列數最大行數 方向 <?xml version

安卓佈局 相對佈局網格佈局

筆記: 案例一:相對佈局 相對佈局(重點) 1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的,因此叫相對佈局 1.2 如果A元件位置是由B元件的位置決定的,Android要求先定B元件,再定義A元件 如果A元件位置是由B元件的位置決定的,Android

相對佈局RelativeLayout 網格佈局GridLayout

1.1 相對佈局視窗內子元件的位置總是相對兄弟元件、父容器來決定的,因此叫相對佈局 1.2 id型 @+id和@id的區別 @+id/x1(新增新ID) @id/x1(引用此ID) 相對於指定元素(根據ID指定) 1.3 layout_toRightOf,layout_toLeftOf(

Android佈局網格佈局

1. 什麼是佈局    就是把介面中的控制元件按照某種規律擺放到指定的位置 2. 佈局的二種實現    程式碼    xml配置檔案:res/layout目錄下      注:也可以同時使用xml和程式

tensorflow實現線性迴歸邏輯迴歸

關於線性迴歸和邏輯迴歸的原理和python實現,請左轉:邏輯迴歸、線性迴歸。 這裡就直接貼程式碼了。 線性迴歸: # -*- coding: utf-8 -*- """ Created on Thu Aug 30 09:40:50 2018 @author: 96jie """ im

相對佈局網格佈局相關示例

RelativeLayout相對佈局      關鍵使用:控制元件id的設定     相對佈局實現小五角示例     layout佈局程式碼 <RelativeLayout xmlns:android="ht

web前端課程技術分享之關於rem佈局vw佈局的理解

 通過rem來實現響應式佈局:   首先來看,什麼是rem單位。rem是一個靈活的、可擴充套件的單位,由瀏覽器轉化畫素並顯示。與em單位不同,rem單位無論巢狀層級如何,都只相對於瀏覽器的根元素(HTML元素)的font-size。預設情況下,h

java swing 常用的三種佈局方式:邊界佈局、流佈局網格佈局管理器

作者:firstmiki 來源:firstmiki的部落格 著作權歸作者所有,轉載請聯絡作者獲得授權。 這篇博文僅僅簡單介紹了三種常見的佈局管理器,都是一些簡單應用; 一、 邊界佈局管理器(FlowLayout) /* * 功能:演示邊界佈局管理器:元件的位

浮動佈局定位佈局

浮動佈局 一.display小結 /* inline */ /*1.同行顯示, 就相當於純文字, 當一行顯示不下, 如就是一個字顯示不下,那麼顯示不下的那一個字就會自動換行,和純文字的區別就是有標籤整體的概念,標籤與標籤間有一個空格的隔斷*/ /*2.支援部分css樣式, 不支援寬高 |

Flex佈局Box佈局的區別以及相容性

flex佈局和box佈局的預設值區別 1、box佈局與flex佈局僅有的幾個屬性表現一致的: 1、box-orient: horizontal | vertical == flex-direction: row | column // 決定主軸方向,預設值都是橫向

MapReduce功能實現一---HbaseHdfs之間資料相互轉換

MapReduce功能實現系列: 一、從Hbase表1中讀取資料再把統計結果存到表2 在Hbase中建立相應的表1: create 'hello','cf' put 'hello','1','cf:hui','hello world' put 'he