close
1.啟用databinding:
gradle
android { dataBinding { enabled = true } }
2.layout item xml(<data> 讓binding產生出 binding class)
<?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> </data> <RelativeLayout android:id="@+id/layout" android:layout_width="105dp" android:layout_height="105dp" android:orientation="vertical"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="match_parent" /> <TextView android:id="@+id/id" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:gravity="center_horizontal" android:textSize="18sp" android:text="123"/> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/id" android:layout_alignParentBottom="true" android:gravity="bottom|center_horizontal" android:maxHeight="100dp" android:textSize="18sp" android:text="456"/> </RelativeLayout> </layout>
3.recycleView adapter()
public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.Holder> { List<ItemVo> itemVos; public RecycleViewAdapter(List<ItemVo> item){ itemVos = item;//取得data list } @NonNull @Override public Holder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { //create item holder和layout 產生的 Binding做綁定 return new Holder(PhotoItemBinding.inflate(LayoutInflater.from(parent.getContext()),parent,false));//photo_item為item xml layout } @Override public void onBindViewHolder(@NonNull Holder holder, int position) { holder.bind(itemVos.get(position));//每次更新item從holder bing更新 } @Override public int getItemCount() { return itemVos.size(); } public class Holder extends ViewHolder { private Handler handler = new Handler(); private PhotoItemBinding bind; public Holder(@NonNull PhotoItemBinding binding) { super(binding.getRoot()); bind = binding;//binding綁定 } public void bind(ItemVo item){//每次更新item從這裡抓取資料 bind.id.setText(item.getId()+""); bind.title.setText(item.getTitle()); downloadImageAndSet(item.getThumbnailUrl());//異步更新item UI } private void downloadImageAndSet(final String thumbnailUrl) { new Thread(() -> {//轉成背景執行序下載圖片 try { URL url = new URL(thumbnailUrl); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); handler.post(() -> { bind.image.setImageBitmap(BitmapFactory.decodeStream(input));//轉成主線程更新UI }); }catch (Exception e){ Log.d("test", "setThumbnailUrl: " + e.toString()); } }).start(); } } }
4.Activity
recyclerView = findViewById(R.id.recycle); recyclerView.setHasFixedSize(true); layoutManager = new GridLayoutManager(this,4);//將recycleView變成一行4個item的gridview recyclerView.setLayoutManager(layoutManager); mAdapter = new RecycleViewAdapter(item);//將item array 跟 adapter做綁定 recyclerView.setAdapter(mAdapter);//set Adapter
---------------------------------------------------
databinding xml使用
<data> <variable name="user" type="com.example.User"/> </data>
android:text="@{user.firstName}"
全站熱搜
留言列表