Trao đổi với tôi

http://www.buidao.com

2/26/18

[Real Estate] Các hình thức góp vốn bằng quyền sử dụng đất theo quy định của Luật Đất đai năm 2013

Các hình thức góp vốn bằng quyền sử dụng đất theo quy định của Luật Đất đai năm 2013

Theo quan điểm của pháp luật La Mã được thể hiện trong luật dân sự một số quốc gia Châu Âu thì quyền sở hữu tài sản bao gồm quyền chiếm hữu, quyền sử dụng và quyền định đoạt. Quyền sử dụng là quyền khai thác công dụng và hưởng hoa lợi, lợi tức từ tài sản. Với những lợi ích đem lại từ việc sử dụng tài sản đã làm cho quyền sử dụng trở thành đối tượng của giao dịch, trong đó có góp vốn. Cũng như các tài sản khác, chủ sở hữu đất đai có quyền chiếm hữu, sử dụng và định đoạt. Ở Việt Nam, đất đai thuộc sở hữu toàn dân do Nhà nước đại diện chủ sở hữu thống nhất quản lý. Nhà nước không trực tiếp sử dụng đất mà chuyển giao cho các chủ thể khác thông qua giao đất, cho thuê đất, công nhận quyền sử dụng đất (QSDĐ). Mặc dù, đất đai thuộc sở hữu toàn dân nhưng việc thực thi một số quyền của chủ sở hữu lại thuộc về người sử dụng đất (NSDĐ). Với quy định của pháp luật hiện nay cho thấy, quyền của NSDĐ ở nước ta đã tiệm cận đến quyền sở hữu đất đai. QSDĐ không chỉ là quyền sử dụng đất đai, mà còn là quyền sở hữu một loại tài sản đặc biệt. Chính vì thế, NSDĐ có thể góp vốn trên phương diện quyền sử dụng đất đai và trên phương diện quyền sở hữu tài sản. Do đó, góp vốn bằng QSDĐ vừa có đặc trưng của hình thức góp vốn bằng quyền sử dụng tài sản, vừa có đặc trưng của hình thức góp vốn bằng quyền sở hữu tài sản. Với cách tiếp cận này, pháp luật Việt Nam ghi nhận hai hình thức góp vốn là góp vốn chuyển QSDĐ và góp vốn không chuyển QSDĐ.

Thứ nhất, hình thức góp vốn không chuyển quyền sử dụng đất
Trên phương diện này, QSDĐ là quyền khai thác và sử dụng đất đai. Do mục đích của các bên trong quan hệ này là khai thác và sử dụng đất đai, vì thế, bên góp vốn chỉ chuyển giao quyền sử dụng đất đai cho bên nhận góp vốn mà không chuyển giao các quyền khác của NSDĐ. Do chỉ chuyển giao quyền sử dụng đất đai, nên bên góp vốn vẫn có thể thực hiện các quyền khác của NSDĐ như thế chấp, để lại thừa kế, tặng cho QSDĐ.
Theo khoản 3, khoản 4 Điều 730 Bộ luật Dân sự năm 2005 thì bên góp vốn “được nhận lại quyền sử dụng đất đã góp vốn theo thỏa thuận hoặc khi thời hạn góp vốn đã hết”; “hủy bỏ hợp đồng và yêu cầu bồi thường thiệt hại nếu bên nhận góp vốn không thực hiện thanh toán phần lợi nhuận đúng thời hạn hoặc thanh toán đầy đủ”. Khoản 3 Điều 732 Bộ luật Dân sự 2005 quy định, bên nhận góp vốn có quyền “được cấp giấy chứng nhận quyền sử dụng đất… trừ trường hợp góp vốn trong hợp đồng hợp tác kinh doanh”. Còn theo điểm a khoản 4 Điều 80 Nghị định số 43/2014/NĐ-CP ngày 15/5/2014 của Chính phủ quy định chi tiết một số điều, khoản của Luật Đất đai: “Trường hợp hết thời hạn góp vốn hoặc do thỏa thuận của các bên về chấm dứt việc góp vốn thì bên góp vốn quyền sử dụng đất được tiếp tục sử dụng đất đó trong thời hạn còn lại”.
Như vậy, hình thức góp vốn này sẽ không chuyển QSDĐ từ bên góp vốn sang bên nhận góp vốn. Bên góp vốn sẽ nhận lại QSDĐ theo thỏa thuận hoặc khi hết thời hạn góp vốn. So với thuê đất, hình thức góp vốn bằng QSDĐ này có một số điểm giống nhau: (i) Góp vốn bằng QSDĐ và thuê đất đều không chuyển QSDĐ, nhưng có thay đổi chủ thể sử dụng đất, vì vậy, bên góp vốn, bên cho thuê phải đăng ký biến động đất đai. Do không chuyển QSDĐ, nên bên nhận góp vốn, bên thuê đất không được cấp giấy chứng nhận QSDĐ (trừ trường hợp thuê đất giữa Nhà nước với NSDĐ); (ii) Do không chuyển QSDĐ nên bên góp vốn, bên cho thuê vẫn có thể thực hiện các quyền khác của NSDĐ như tặng cho, để lại thừa kế, thế chấp; (iii) Góp vốn bằng QSDĐ và thuê đất đều có thời hạn, thời hạn góp vốn, thuê đất không được vượt quá thời hạn sử dụng đất.
Mặc dù, góp vốn bằng QSDĐ và thuê đất có điểm tương đồng, song hai hình thức này có nhiều điểm khác nhau. Với góp vốn, bên góp vốn dùng giá trị QSDĐ góp vốn và trở thành đồng sở hữu đối với bên nhận góp vốn. Thuê đất, bên cho thuê sử dụng tiền thuê vào mục đích khác mà không phải góp vốn. Do cùng mục đích kinh doanh, nên giữa bên góp vốn với bên nhận góp vốn có quan hệ chặt chẽ hơn so với giữa bên cho thuê và bên thuê đất. Bên góp vốn được hưởng lợi ích theo sự thỏa thuận giữa các bên và tỷ lệ tương ứng theo phần vốn góp mà không cố định như trong thuê đất.
Thứ hai, hình thức góp vốn có chuyển quyền sử dụng đất
Đất đai thuộc sở hữu toàn dân do Nhà nước đại diện chủ sở hữu thống nhất quản lý. Ngoài diện tích đất do Nhà nước sử dụng vì mục đích công cộng, phần lớn đất đai do các chủ thể khác sử dụng. Nhà nước chuyển giao QSDĐ cho các chủ thể khác thông qua giao đất, cho thuê đất, công nhận QSDĐ. QSDĐ trị giá được bằng tiền và có thể chuyển giao trong giao dịch là đối tượng của giao dịch trong đó có góp vốn. Trên phương diện này, góp vốn bằng QSDĐ giống với góp vốn bằng quyền sở hữu tài sản cho dù người góp vốn không có quyền sở hữu đất đai.
Mặc dù, Luật Đất đai năm 2013 không có quy định phân biệt hình thức góp vốn là quyền sử dụng đất đai và hình thức góp vốn là quyền sở hữu tài sản, nhưng căn cứ quy định về quyền và nghĩa vụ của các bên trong hợp đồng góp vốn bằng QSDĐ được quy định trong Bộ luật Dân sự năm 2005, Luật Doanh nghiệp năm 2014 và Luật Đất đai năm 2013 có thể thấy:  Khoản 13 Điều 4 Luật Doanh nghiệp năm 2014 quy định: “Góp vốn là việc góp tài sản để tạo thành vốn điều lệ của công ty”. Góp vốn bao gồm góp vốn để thành lập doanh nghiệp hoặc góp thêm vốn điều lệ của doanh nghiệp đã được thành lập. Về tài sản góp vốn có thể là đồng Việt Nam, ngoại tệ tự do chuyển đổi, vàng, giá trị quyền sử dụng đất (khoản 1 Điều 35 Luật Doanh nghiệp năm 2014). Với từng loại hình doanh nghiệp, pháp luật quy định về trình tự, thủ tục góp vốn khác nhau. Đối với tài sản đăng ký hoặc giá trị QSDĐ, thì người góp vốn phải làm thủ tục chuyển quyền sở hữu tài sản hoặc quyền sử dụng đất cho công ty tại cơ quan nhà nước có thẩm quyền (điểm a khoản 1 Điều 36 Luật Doanh nghiệp năm 2014). Bên nhận góp vốn được cấp giấy chứng nhận quyền sử dụng đất trong trường hợp bên nhận góp vốn là pháp nhân (khoản 3 Điều 732 Bộ luật Dân sự năm 2005). Theo khoản 10 Luật Đất đai năm 2013 thì: “Chuyển quyền sử dụng đất là việc chuyển giao quyền sử dụng đất từ người này sang người khác thông qua các hình thức chuyển đổi, chuyển nhượng, thừa kế, tặng cho quyền sử dụng đất và góp vốn bằng QSDĐ”. Nhà nước cấp giấy chứng nhận QSDĐ, quyền sở hữu nhà và tài sản khác gắn liền với đất cho người được chuyển đổi, nhận chuyển nhượng, được thừa kế… nhận góp vốn bằng QSDĐ (điểm c khoản 1 Điều 99 Luật Đất đai năm 2013). Tổ chức kinh tế, doanh nghiệp liên doanh nhận chuyển quyền sử dụng đất thông qua góp vốn bằng quyền sử dụng đất (điểm c khoản 1 Điều 169 Luật Đất đai năm 2013).
Với quy định trên cho thấy, hình thức góp vốn bằng QSDĐ trên phương diện quyền sở hữu tài sản là để thành lập doanh nghiệp hoặc góp vốn vào doanh nghiệp đã được thành lập. Đặc trưng của hình thức góp vốn này là có sự chuyển QSDĐ từ bên góp vốn sang bên nhận góp vốn. Khi góp vốn hoàn thành, tùy thuộc vào loại hình doanh nghiệp mà bên góp vốn trở thành thành viên của công ty trách nhiệm hữu hạn, công ty hợp danh; cổ đông của công ty cổ phần; xã viên của hợp tác xã, liên hiệp hợp tác xã. Khi trở thành thành viên của công ty hoặc xã viên hợp tác xã, bên góp vốn có quyền tham gia hoạt động kinh doanh của doanh nghiệp.
So với hình thức góp vốn không chuyển QSDĐ thì hình thức góp vốn này có một số điểm khác: (i) Bên góp vốn trở thành chủ sở hữu hoặc đồng sở hữu doanh nghiệp mới thành lập hoặc doanh nghiệp đang hoạt động, có quyền tham gia quyết định các vấn đề sản xuất kinh doanh của doanh nghiệp. Khi doanh nghiệp làm ăn hiệu quả, vốn góp bằng QSDĐ sẽ tăng theo giá trị của doanh nghiệp; (ii) Bên nhận góp vốn trong trường hợp này là doanh nghiệp mới thành lập hoặc doanh nghiệp đang hoạt động sẽ được cấp giấy chứng nhận QSDĐ. Bên nhận góp vốn có thể sử dụng QSDĐ thế chấp tại các tổ chức tín dụng để vay vốn nhằm phát triển sản xuất, kinh doanh. Cũng như tài sản khác, khi góp vốn, QSDĐ không chỉ được phát huy trên phương diện sử dụng, mà còn được phát huy trên phương diện vốn; (iii) Ba là, so với hình thức góp vốn không chuyển QSDĐ, thì hình thức góp vốn này mang tính bền vững hơn. Do QSDĐ được chuyển sang doanh nghiệp mới nên việc chuyển nhượng, rút vốn ra khỏi doanh nghiệp chịu sự kiểm soát của các thành viên trong doanh nghiệp và sự điều chỉnh của Luật Doanh nghiệp, Luật Phá sản.
Hai hình thức góp vốn bằng QSDĐ có đặc thù riêng, nhưng pháp luật lại không có những quy định đặc thù áp dụng cho mỗi hình thức góp vốn nên thực tiễn áp dụng gặp rất nhiều vướng mắc, cụ thể như sau:
Một là, theo khoản 4 Điều 730 Bộ luật Dân sự năm 2005, thì bên góp vốn được quyền hủy bỏ hợp đồng góp vốn và yêu cầu bồi thường thiệt hại nếu bên nhận góp vốn không thực hiện việc thanh toán lợi nhuận đúng thời hạn hoặc thanh toán không đầy đủ. Quy định này không phù hợp với hợp đồng góp vốn. Bởi lẽ, với góp vốn có chuyển QSDĐ, thì QSDĐ là tài sản của bên nhận góp vốn khi được cấp giấy chứng nhận QSDĐ. Nếu bên nhận góp vốn vi phạm nghĩa vụ thanh toán lợi nhuận thì sẽ được giải quyết bằng một vụ án kinh doanh, thương mại. Với góp vốn không chuyển QSDĐ thì căn cứ để hủy hợp đồng nêu trên cũng không phù hợp, bởi lẽ, khi góp vốn bằng QSDĐ bên nhận góp vốn phải đầu tư để phục vụ hoạt động sản xuất kinh doanh, nếu chỉ vì nghĩa vụ chậm thanh toán hoặc thanh toán không đầy đủ mà hủy hợp đồng góp vốn bằng QSDĐ sẽ gây thiệt hại cho bên nhận góp vốn khi mà họ đã đầu tư tài sản trên đất và tài sản này không thể di dời.
Hai là, theo quy định tại khoản 3 Điều 730 Bộ luật Dân sự năm 2005, thì bên góp vốn được nhận lại QSDĐ theo thỏa thuận hoặc theo khi hết thời hạn góp vốn. Quy định này chỉ phù hợp với góp vốn không chuyển QSDĐ. Đối với góp vốn bằng QSDĐ để thành lập doanh nghiệp hoặc góp vốn vào doanh nghiệp đã được thành lập, thì QSDĐ trở thành tài sản của doanh nghiệp hình thành từ góp vốn. Theo nguyên lý chung của góp vốn bằng quyền sở hữu tài sản, thì bên góp vốn không được nhận lại tài sản đã góp vốn. Việc nhận lại vốn góp được thực hiện theo quy định của Luật Doanh nghiệp tương ứng với từng loại hình doanh nghiệp.
Ba là, theo khoản 2 Điều 730 Bộ luật Dân sự năm 2005, thì bên góp vốn được để lại thừa kế phần vốn góp bằng giá trị QSDĐ. Do không quy định cụ thể nên việc áp dụng quy định này đối với góp vốn không chuyển QSDĐ gặp nhiều vướng mắc. Trường hợp góp vốn không chuyển QSDĐ, di sản thừa kế của người góp vốn bao gồm phần đó là phần vốn đã góp và QSDĐ sau khi hết thời hạn góp vốn. Người góp vốn bằng QSDĐ có thể để lại thừa kế theo di chúc hoặc theo pháp luật. Vì thế, di sản là phần vốn góp và QSDĐ có thể được chia cho hai chủ thể khác nhau. Ví dụ, năm 2012 ông A góp vốn bằng quyền sử dụng 1.000 m2 đất trong thời hạn 20 năm trị giá 1 tỷ đồng với ông B để thành lập Công ty TNHH X, vốn góp của ông A tương đương với 50% vốn điều lệ của Công ty X. Năm 2014, ông A chết, trước khi chết ông A lập di chúc để cho bà M được thừa kế phần vốn góp vào Công ty X. Do ông A góp vốn không chuyển QSDĐ nên QSDĐ sau khi hết hạn góp vốn sẽ được chia theo pháp luật. Trong khi các thừa kế theo pháp luật của ông A yêu cầu chia di sản thừa kế và chuyển nhượng QSDĐ trong khi bà M muốn kế thừa tư cách của ông A ở Công ty X. Vấn đề đặt ra, khi các thừa kế theo pháp luật của ông A không đồng ý để bà M tiếp tục góp vốn bằng QSDĐ tại tại Công ty X thì bà M có được tiếp tục góp vốn bằng QSDĐ hay không. Các thừa kế của ông A có bị hạn chế việc thực hiện QSDĐ đã góp vốn hay không.
Từ những phân tích trên, chúng tôi cho rằng, pháp luật cần có quy định cụ thể đối với hai hình thức góp vốn bằng QSDĐ. Góp vốn bằng QSDĐ trên phương diện là quyền sử dụng đất đai cần có quy định phù hợp với hình thức góp vốn bằng quyền sử dụng tài sản. Việc hủy hợp đồng chỉ được đặt ra với những trường hợp vi phạm nghiêm trọng không thể khắc phục được. Đối với hình thức góp vốn chuyển QSDĐ, do bên nhận góp vốn là NSDĐ mới có đầy đủ các quyền và nghĩa vụ của NSDĐ. Vì thế, không nên quy định bên góp vốn được nhận lại QSDĐ khi thời hạn góp vốn. Đối với trường hợp người góp vốn bằng QSDĐ để lại thừa kế mà phần vốn góp và QSDĐ được chia cho các chủ thể khác nhau cần quy định theo đó người thừa kế QSDĐ bị hạn chế việc thực hiện quyền của NSDĐ trong thời hạn góp vốn được xác định trong hợp đồng góp vốn bằng QSDĐ.
Sỹ Hồng Nam
Vụ Giám đốc kiểm tra II - Tòa án nhân dân tối cao

2/6/18

[Android], Android từ đầu: Hiểu về Adapter và Adapter View

Adapter View ở khắp mọi nơi và bạn sẽ khó mà tìm thấy một ứng dụng Android phổ biến mà không sử dụng chúng. Tên nghe có vẻ lạ, nhưng nếu bạn nghĩ rằng bạn chưa bao giờ nhìn thấy một Adapter View, thì bạn có thể đã sai lầm. Mỗi khi bạn nhìn thấy một ứng dụng Android hiển thị các phần tử của giao diện người dùng dưới dạng một danh sách, một lưới hoặc ngăn xếp, tức là bạn đã nhìn thấy một Adapter View trong thực tế.
Một Adapter View, như tên gọi của nó, là một đối tượng View. Điều này có nghĩa là, bạn có thể thêm nó vào các Activity của bạn theo cùng một cách bạn thêm bất cứ thành phần giao diện người dùng khác. Tuy nhiên, nó không có khả năng hiển thị bất kỳ dữ liệu nào của riêng mình. Nội dung của nó luôn luôn được xác định bởi một đối tượng khác, một Adapter. Trong bài này, tôi sẽ hướng dẫn cho bạn cách làm thế nào để tạo ra các Adapter và sử dụng chúng để tạo ra các loại Adapter View khác nhau chẳng hạn như ListView và GridView.
Một Adapter là một đối tượng của một lớp cài đặt giao diện Adapter. Nó đóng vai trò như là một liên kết giữa một tập hợp dữ liệu và một Adapter View, một đối tượng của một lớp thừa kế lớp trừu tượng AdapterView. Tập hợp dữ liệu có thể là bất cứ điều gì mà trình bày dữ liệu một cách có cấu trúc. Mảng, các đối tượng List và các đối tượng Cursor thường sử dụng bộ dữ liệu.
Một Adapter có trách nhiệm lấy dữ liệu từ bộ dữ liệu và tạo ra các đối tượng View dựa trên dữ liệu đó. Các đối tượng View được tạo ra sau đó được sử dụng để gắn lên bất kỳ Adapter View mà ràng buộc với Adapter
Bạn có thể tạo các lớp Adapter riêng của bạn từ đầu, nhưng hầu hết các nhà phát triển muốn sử dụng hoặc thừa kế các lớp Adapter được cung cấp bởi Android SDK, chẳng hạn như ArrayAdapter và SimpleCursorAdapter. Trong hướng dẫn này, chúng ta sẽ tập trung vào lớp ArrayAdapter.
Adapter View có thể hiển thị các bộ dữ liệu lớn rất hiệu quả. Ví dụ, ListView và GridView có thể hiển thị hàng triệu phần tử mà không có bất cứ độ trễ đáng kể nào trong khi vẫn sử dụng bộ nhớ và CPU rất thấp. Chúng có thể làm điều đó như thế nào? Các Adapter View khác nhau tuân theo những chiến lược khác nhau. Tuy nhiên, đây là những gì mà hầu hết chúng thường làm.
  • Chúng chỉ kết xuất những đối tượng View mà đã trên màn hình hoặc nó đang di chuyển vào màn hình. Bằng cách này, bộ nhớ tiêu thụ bởi một Adapter View có thể được cố định và độc lập với kích thước của tập dữ liệu.
  • Chúng cũng cho phép các nhà phát triển giảm thiểu công sức cho các hoạt động inflate layout và tái sử dụng các đối tượng View sẵn có đã di chuyển khỏi màn. Điều này sẽ giúp tiêu thụ CPU thấp.
Để tạo một Adapter, bạn cần những thứ sau đây:
  • một tập hợp dữ liệu
  • một tập tin có chứa Layout của các đối tượng View được tạo ra
Ngoài ra, vì lớp ArrayAdapter chỉ có thể làm việc với chuỗi, nên bạn cần phải chắc chắn rằng Layout của các đối tượng View được tạo ra có chứa ít nhất một TextView.
Lớp ArrayAdapter có thể sử dụng cả mảng và các đối tượng List như là bộ dữ liệu. Bây giờ, hãy sử dụng một mảng làm tập hợp dữ liệu.
Tạo một tập tin Layout XML mới mà phần tử gốc là một LinearLayout và đặt tên nó là item.xml. Kéo và thả một Large text widget vào trong đó và thiết lập giá trị thuộc tính id của nó thành cheese_name. Tập tin Layout XML sẽ trông như thế này:
Trong Activity của bạn, tạo ra một đối tượng mới của lớp ArrayAdapter bằng cách sử dụng hàm xây dựng của nó. Đối với các đối số của nó, truyền vào tên của tập tin tài nguyên, định danh của TextView, và một tham chiếu đến mảng. Adapter bây giờ đã sẵn sàng.
Để hiển thị một danh sách cuộn theo chiều dọc của các phần tử, bạn có thể sử dụng ListView. Để thêm nó vào Activity của bạn, bạn có thể kéo và thả nó vào trong tập tin layout XML của Activity hoặc tạo ra nó bằng cách sử dụng hàm xây dựng của nó trong code Java của bạn. Bây giờ, chúng ta thực hiện cái thứ hai.
Thông thường, không có các thành phần giao diện người dùng khác được đặt bên trong một Layout có chứa một ListView. Vì vậy, truyền ListView vào phương thức setContentView() của Activity để nó chiếm toàn bộ màn hình.
Để liên kết ListView với Adapter mà chúng ta đã tạo ra ở bước trước đó, hãy gọi phương thức setAdapter()như hình dưới đây.
Nếu bạn chạy ứng dụng của bạn ngay bây giờ, bạn có thể xem nội dung của các mảng ở dạng một danh sách.
ListView With ArrayAdapter
Để hiển thị một danh sách lưới hai chiều cuộn theo chiều dọc của các phần tử, bạn có thể sử dụng GridView. Cả ListView và GridView là lớp con của lớp trừu tượng AbsListView và chúng chia sẻ nhiều điểm tương đồng. Vì vậy, nếu bạn biết cách sử dụng một cái, thì bạn cũng sẽ biết cách sử dụng cái còn lại.
Sử dụng hàm xây dựng của lớp GridView để tạo ra một đối tượng mới và truyền nó vào phương thức setContentView() của Activity.
Để thiết lập số cột trong Grid, hãy gọi phương thức setNumColumns() của nó. Tôi sẽ cho nó hai cột.
Thông thường, bạn sẽ cần điều chỉnh độ rộng của các cột và khoảng cách giữa chúng bằng cách sử dụng các phương thức setColumnWidth()setVerticalSpacing() và setHorizontalSpacing(). Lưu ý rằng những phương thức này sử dụng pixel làm đơn vị của chúng.
Bạn bây giờ có thể buộc GridView vào adapter mà chúng ta đã tạo ra trước đó bằng cách sử dụng phương thức setAdapter().
Chạy lại ứng dụng của bạn một lần nữa để xem GridView trông như thế nào.
GridView With ArrayAdapter
Chúng ta có thể lắng nghe các sự kiện chạm và chạm lâu vào các phần tử bên trong một Adapter View. Ví dụ, hãy thêm một listener sự kiện bấm vào GridView.
Tạo ra một đối tượng mới của một lớp nặc danh cài đặt giao diện AdapterView.OnItemClickListener và truyền nó vào phương thức setOnItemClickListener() của đối tượng GridView. Android Studio tự động tạo ra ngẫu nhiên phương thức onItemClick() của giao diện. Bạn sẽ thấy rằng các tham số của phương thức bao gồm một số nguyên xác định vị trí của phần tử. Bạn có thể sử dụng số nguyên này để tìm thấy phần tử trong bộ dữ liệu mà người dùng đã nhấp vào.
Các code sau đây minh họa cách làm thế nào để hiển thị một thông báo đơn giản mỗi khi một phần tử trong GridView được nhấp.
Nếu bạn chạy ứng dụng và nhấp vào bất kỳ phần tử nào trong Grid, một thông báo sẽ xuất hiện ở dưới cùng của màn hình. Lưu ý rằng bạn có thể sử dụng code tương tự để lắng nghe các sự kiện nhấp lên các phần tử bên trong một ListView.
Snackbar Shown When Items Are Clicked
Một ArrayAdapter chỉ có thể xử lý một TextView bên trong layout của các đối tượng View mà nó tạo ra. Để mở rộng khả năng của nó, bạn phải thừa kế nó. Tuy nhiên, trước khi chúng ta làm điều đó, chúng ta hãy tạo ra một tập hợp dữ liệu phức tạp hơn một chút.
Thay vì chuỗi, giả sử rằng tập hợp dữ liệu của chúng ta có chứa các đối tượng của lớp sau đây:
Đây là tập hợp dữ liệu mà chúng ta sẽ sử dụng:
Như bạn thấy, lớp Cheese có chứa hai trường, name và description. Để hiển thị cả hai trường trong một List hoặc Grid, thì layout của các phần tử phải chứa hai TextView.
Tạo một tập tin layout XML mới và đặt tên là custom_item.xml. Thêm Large text và một Small text vào nó. Thiết lập thuộc tính id của cái đầu tiên thành cheese_name và của cái thứ hai là cheese_description. Nội dung của tập tin layout XML bây giờ sẽ giống như thế này:
ArrayAdapter cũng phải có khả năng xử lý hai TextView. Xem lại Activity của bạn, tạo ra một lớp nặc danh mới thừa kế lớp ArrayAdapter và override phương thức getView() của nó. Hãy chắc chắn rằng bạn truyền mảng như là đối số vào hàm xây dựng của nó.
Bên trong phương thức getView(), bạn phải sử dụng tham số position như là một chỉ số của mảng và lấy phần tử ở chỉ số đó.
Tham số thứ hai của phương thức getView() là những gì cho phép chúng ta tái sử dụng các đối tượng View. Nếu bạn bỏ qua nó, hiệu suất của các adapter view của bạn sẽ thấp. Khi phương thức getView()được gọi lần đầu tiên, thì convertView là null. Bạn phải khởi tạo nó bằng cách inflate tập tin tài nguyên xác định layout của các phần tử. Để làm như vậy, hãy lấy một tham chiếu đến một LayoutInflater bằng cách sử dụng phương thức getLayoutInflater() và gọi phương thức inflate() của nó.
Tại thời điểm này, bạn có thể sử dụng findViewById() để có được một tham chiếu đến các TextView bên trong layout và gọi phương thức setText() để khởi tạo chúng bằng cách sử dụng dữ liệu từ mảng.
Cuối cùng, trả về convertView vì vậy mà nó có thể được sử dụng để đưa bất kỳ adapter view kết hợp với adapter.
Advertisement
Phương thức getView() được gọi liên tục bởi Adapter View để phân phối chính nó. Vì vậy, bạn phải cố gắng giảm thiểu số lượng các hoạt động mà bạn thực hiện bên trong nó.
Ở bước trước, bạn có thể thấy rằng, mặc dù chúng ta đã chắc chắn rằng layout của các phần tử trong danh sách inflate chỉ một lần, nhưng phương thức findViewById(), chiếm nhiều CPU, được gọi mỗi khi phương thức getView() được gọi.
Để tránh điều này và cải thiện hiệu suất của Adapter View, chúng ta cần lưu trữ các kết quả của phương thức findViewById() bên trong đối tượng convertView. Để làm như vậy, chúng ta có thể sử dụng một đối tượng View Holder, nó không có gì khác hơn là một đối tượng của một lớp có thể lưu trữ các thành phần hiện diện trong layout.
Bởi vì layout có hai TextView, nên View Holder cũng phải có hai TextView. Tôi đã đặt tên lớp là ViewHolder.
Trong phương thức getView(), sau khi bạn inflate layout, bây giờ bạn có thể khởi tạo đối tượng View Holder bằng cách sử dụng phương thức findViewById().
Để lưu trữ đối tượng View Holder trong convertView, sử dụng phương thức setTag() của nó.
Và bây giờ, mỗi khi getView() được gọi, bạn có thể lấy đối tượng View Holder từ convertView bằng cách sử dụng phương thức getTag() và cập nhật các TextView bên trong nó bằng cách sử dụng phương thức setText() của chúng.
Nếu bạn chạy ứng dụng của bạn ngay bây giờ, bạn có thể thấy GridView hiển thị hai dòng văn bản trong mỗi ô.
GridView with two lines of text per item
Trong hướng dẫn này, bạn đã biết cách làm thế nào để tạo ra một Adapter và sử dụng nó để phân phối các Adapter View khác nhau. Bạn cũng học được cách tạo Adapter tuỳ biến riêng của bạn. Mặc dù chúng ta chỉ tập trung vào các lớp ArrayAdapterListView và GridView, nhưng bạn có thể sử dụng các kỹ thuật tương tự cho các Adapter và Adapter View mà Android SDK cung cấp.
Android Support Library có bao gồm lớp RecyclerView. Nó hoạt động rất giống một Adapter View, nhưng nó không phải là một lớp con của lớp AdapterView. Bạn nên xem xét việc sử dụng nó nếu bạn muốn tạo các danh sách phức tạp hơn, đặc biệt là những cái mà sử dụng tập tin layout cho các phần của chúng. Để tìm hiểu thêm về nó, bạn có thể tham khảo hướng dẫn này trên Envato Tuts+.
Để tìm hiểu thêm về lớp AdapterView và các lớp con của nó, bạn có thể tham khảo tài liệu hướng dẫn của nó.

Link: https://code.tutsplus.com/vi/tutorials/android-from-scratch-understanding-adapters-and-adapter-views--cms-26646