01/10/2018, 11:52

Thắc mắc về LayoutInflater trong Android

Chào mọi người, hiện tại em đang học lập trình Android. Em có vài thắc mắc khi học đến phần LayoutInflater, mong mọi người giúp đỡ ạ.
Em có một ví dụ như sau:

Trong file customlayout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.nguye.layoutinflater.MainActivity"
    android:padding="20sp">


    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/textview1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text"/>


</android.support.constraint.ConstraintLayout>

Trong file CustomAdapter.java

/**
Để tóm gọn thì em lượt bỏ một số method, chỉ tập trung vào LayoutInflater thôi 
 */

public class customadapter extends BaseAdapter {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        
        convertView = layoutInflater.inflate(R.layout.customlayout.xml, parent, false);
        
        return convertView;
    }
}

Sau khi tham khảo trên Android Developer thì em hiểu đoạn code trên như sau:

  • convertView (đóng vai trò như một ViewGroup?), sẽ nhận được tất cả các thuộc tính của parent là ConstrainLayout (vì attachToRoot nhận giá trị là false), và được phân cấp theo sơ đồ: convertView --> ConstrainLayout --> ImageView, TextView.

Nhưng cách hiểu trên có một vấn đề khi đổ ra dữ liệu ra ListView, đó là: mỗi convertView có chiều cao là match_parent thì phải chiếm hết chiều cao của Context mới đúng, nhưng khi hiển thị ra màn hình thì lại có độ cao là wrap_content.

Nhờ mọi người giải thích giúp em ạ. Cảm ơn mọi người.

Trần Ngọc Khoa viết 14:00 ngày 01/10/2018

Chính xác là nó sẽ chiếm hết chiều cao context, nhưng các thành phần của nó là wrap_content.
Mình nghĩ là bạn còn quên nhắc đến một activity nữa là activity_main. Trong đó có khai báo một ListView có kích thước là wrap_content. Sau đó bạn cũng có một vài dòng code để đổ dữ liệu vào ListView đó.

Bài liên quan
0