使用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-permissionactivity_questionsandroid:name="android.permission.INTERNET"/>
<?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"itemandroid: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>
<?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功能實現一---Hbase和Hdfs之間資料相互轉換
MapReduce功能實現系列: 一、從Hbase表1中讀取資料再把統計結果存到表2 在Hbase中建立相應的表1: create 'hello','cf' put 'hello','1','cf:hui','hello world' put 'he