Hỏi về đoạn code android chưa hiểu

Em xin chào mọi người,

Em đang tìm hiểu khóa lập trình android từ Khoa Phạm mà tới vài custom listview tạo adapter em chưa hiểu đoạn code sau lắm, giờ chỉ biết nó cần đoạn mã đó để chạy chứ chưa biết nó là gì và cơ chế hoạt động như nào, mong mọi người chỉ giúp em ạ:

 LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);//Lấy context
 convertView = inflater.inflate(layout, null); /// Lấy layout

Đoạn mã này được trích trong hàm sau ạ:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    //Nếu trạng thái holder chưa có giá trị
    if (convertView == null) {
        holder = new ViewHolder();
        //Thì gán giá trị cho view holder
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);//Lấy context
        convertView = inflater.inflate(layout, null); /// Lấy layout

        //Ánh xạ
        holder.txtName = (TextView) convertView.findViewById(R.id.txtName);
        holder.txtDes = (TextView) convertView.findViewById(R.id.txtDes);
        holder.imgView = (ImageView) convertView.findViewById(R.id.ImageView);

        //Truyền vào trạng thái ánh xạ của holder
        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }


    //Gán giá trị
    HanhTinh hanhTinh = lstHanhTinh.get(position);

    holder.txtName.setText(hanhTinh.getName());
    holder.txtDes.setText(hanhTinh.getDescription());
    holder.imgView.setImageResource(hanhTinh.getImageName());

    return convertView;
}

LayoutInflater đơn giản là tạo ra một View mới từ layout resource. Đoạn code trên đang kiểm tra xem convertView có phải là một View được tái chế do adapter không. Nếu không phải (convertView==null) thì tạo một View mới theo cấu trúc của resource layout.
Inflate và inflater có thể coi như là một cách chơi chữ của lập trình viên Google, họ coi các View là những quả bong bóng được thổi phồng và vẽ giao diện lên. Nếu hết bóng, họ dùng ống thổi (inflater) để thổi (inflate) một quả mới và chơi đùa cùng chúng.

Cái này cũng giống như hàm flush() vậy.

4 Likes

Ra là thế, ví dụ dễ hiểu quá, em cảm ơn bác nhiều ạ.

1 Like

Giờ vẫn còn dùng ListView sao? Câu trả lời cho câu hỏi của bạn có được nói một cách chi tiết và dễ hiểu trong video The world of listview trên Youtube.

1 Like

em giốt tiếng anh nên xin nhờ bác chỉ giáo thêm tại sao bây giờ dùng ListView lại không hay ạ ?

:frowning: Vậy thì nên học tiếng Anh đi vì làm Android mà không coi clip này thì rất là lãng phí. Trong các năm Google IO thì có 4 clip mình nghĩ là nên coi và cái này là cái đầu tiên.
Dùng ListView không hay vì bây giờ đã có RecycleView. Nhanh hơn. Hồi mới ra thì họ có benchmark. Tiện dụng hơn. Nhờ có Decorator để layout cũng như thay đổi các thông số hiển thị một cách dễ dàng. Tinh gọn hơn. Nhờ cách viết code khác (chính là từ clip the world of list view) giúp giảm khả năng viết code sai (ViewHolder thành default - tại sao lại phải có ViewHolder? Coi clip mình chỉ), giúp có thể kết hợp với các thư viện bindlayout, DI dễ dàng.

2 Likes

cảm ơn bác nhiều, em sẽ cải thiện vốn kiến thức của mình ạ.

làm ngành này thì không được phép có khái niệm dốt tiếng Anh đâu bạn. Nếu dốt tiếng Anh thì phải cải thiện ngay lập tức rồi mới nghĩ đến code kiếc các kiểu sau.

1 Like

Vâng em cũng cố lắm rồi mà em chả tìm được phương pháp nào “tương thích” với mình cả, em vẫn đang tìm kiếm một phép màu mới…

Nếu học để phục vụ IT thì đọc nhiều lên. Nếu học để giao tiếp thì nghe nhiều lên. Nguồn đọc và nguồn nghe bây giờ khá nhiều. Ban đầu mất thời gian để hiểu được một bài nghe hoặc bài đọc nhưng sau dần sẽ nhớ được.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?