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}"

arrow
arrow
    全站熱搜

    JBLin 發表在 痞客邦 留言(0) 人氣()