Trước khi đi vào ví dụ listview, chúng ta nên biết về listview, Listview là một tập hợp các mục được lấy từ arraylist, list hoặc bất kỳ cơ sở dữ liệu nào. Hầu hết cách sử dụng listview là tập hợp các mục ở dạng dọc, chúng ta có thể cuộn lên / xuống và nhấp vào bất kỳ mục nào.
listview tùy chỉnh là gì?
Chế độ xem danh sách tùy chỉnh hoạt động dựa trên customAdapter. Trong bộ điều hợp tùy chỉnh này, chúng ta có thể chuyển đối tượng tùy chỉnh. Chúng tôi đang chuyển dữ liệu chủ đề đến listview như được hiển thị bên dưới -
Bước 1 - Tạo một dự án mới trong Android Studio, đi tới Tệp ⇒ Dự án Mới và điền tất cả các chi tiết cần thiết để tạo một dự án mới.
Bước 2 - Thêm mã sau vào res / layout / activity_main.xml.
<?xml version = "1.0" encoding = "utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android = "https://schemas.android.com/apk/res/android" xmlns:tools = "https://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent"> <LinearLayout android:layout_width = "match_parent" android:layout_height = "match_parent" android:orientation = "vertical"> <ListView android:id = "@+id/list" android:layout_width = "wrap_content" android:layout_height = "match_parent" android:divider = "#000" android:dividerHeight = "1dp" android:footerDividersEnabled = "false" android:headerDividersEnabled = "false"/> </LinearLayout> </android.support.constraint.ConstraintLayout>
Trong activity_main.xml ở trên, chúng tôi đã khai báo một listview và thêm bộ chia như hình dưới đây.
<ListView android:id = "@+id/list" android:layout_width = "wrap_content" android:layout_height = "match_parent" android:divider = "#000" android:dividerHeight = "1dp" android:footerDividersEnabled = "false" android:headerDividersEnabled = "false" />
Bước 3 - Thêm mã sau vào src / MainActivity.java
import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.ListView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ListView list = findViewById(R.id.list); ArrayList<SubjectData> arrayList = new ArrayList<SubjectData>(); arrayList.add(new SubjectData("JAVA", "https://www.tutorialspoint.com/java/", "https://www.tutorialspoint.com/java/images/java-mini-logo.jpg")); arrayList.add(new SubjectData("Python", "https://www.tutorialspoint.com/python/", "https://www.tutorialspoint.com/python/images/python-mini.jpg")); arrayList.add(new SubjectData("Javascript", "https://www.tutorialspoint.com/javascript/", "https://www.tutorialspoint.com/javascript/images/javascript-mini-logo.jpg")); arrayList.add(new SubjectData("Cprogramming", "https://www.tutorialspoint.com/cprogramming/", "https://www.tutorialspoint.com/cprogramming/images/c-mini-logo.jpg")); arrayList.add(new SubjectData("Cplusplus", "https://www.tutorialspoint.com/cplusplus/", "https://www.tutorialspoint.com/cplusplus/images/cpp-mini-logo.jpg")); arrayList.add(new SubjectData("Android", "https://www.tutorialspoint.com/android/", "https://www.tutorialspoint.com/android/images/android-mini-logo.jpg")); CustomAdapter customAdapter = new CustomAdapter(this, arrayList); list.setAdapter(customAdapter); } }
Trong mainActivity, chúng tôi đã khai báo CustomAdapter và chuyển SubjectData như hình dưới đây -
CustomAdapter customAdapter = new CustomAdapter(this, arrayList); list.setAdapter(customAdapter);
Bước 4 - Tạo một lớp CustomAdapter Thêm mã sau vào src / CustomAdapter.java
import android.content.Context; import android.database.DataSetObserver; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.ListAdapter; import android.widget.TextView; import com.squareup.picasso.Picasso; import java.util.ArrayList; class CustomAdapter implements ListAdapter { ArrayList<SubjectData> arrayList; Context context; public CustomAdapter(Context context, ArrayList<SubjectData> arrayList) { this.arrayList=arrayList; this.context=context; } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return true; } @Override public void registerDataSetObserver(DataSetObserver observer) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public int getCount() { return arrayList.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public boolean hasStableIds() { return false; } @Override public View getView(int position, View convertView, ViewGroup parent) { SubjectData subjectData=arrayList.get(position); if(convertView==null) { LayoutInflater layoutInflater = LayoutInflater.from(context); convertView=layoutInflater.inflate(R.layout.list_row, null); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } }); TextView tittle=convertView.findViewById(R.id.title); ImageView imag=convertView.findViewById(R.id.list_image); tittle.setText(subjectData.SubjectName); Picasso.with(context) .load(subjectData.Image) .into(imag); } return convertView; } @Override public int getItemViewType(int position) { return position; } @Override public int getViewTypeCount() { return arrayList.size(); } @Override public boolean isEmpty() { return false; } }
Bước 5 - Tạo một lớp SubjectData, Thêm đoạn mã sau vào src / SubjectData.java
class SubjectData { String SubjectName; String Link; String Image; public SubjectData(String subjectName, String link, String image) { this.SubjectName = subjectName; this.Link = link; this.Image = image; } }
Bước 6 - Trong lớp CustomAdapter, chúng tôi đã hiển thị hình ảnh nguồn internet. Để hiển thị hình ảnh nguồn internet. chúng tôi đã thêm thư viện picasso như hình dưới đây.
Picasso.with(context) .load(subjectData.Image) .into(imag);
Bước 7 - Để triển khai thư viện picasso, chúng ta phải thêm thư viện picasso trong gradle như hình dưới đây
apply plugin: 'com.android.application' android { compileSdkVersion 28 defaultConfig { applicationId "com.example.andy.myapplication" minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support.constraint:constraint-layout:1.1.3' testImplementation 'junit:junit:4.12' implementation 'com.squareup.picasso:picasso:2.5.1' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' }
Bước 8 - Để truy cập thông tin internet, chúng tôi phải cấp quyền internet cho tệp kê khai như hình dưới đây.
<?xml version = "1.0" encoding = "utf-8"?> <manifest xmlns:android = "https://schemas.android.com/apk/res/android" package = "com.example.andy.myapplication"> <uses-permission android:name = "android.permission.INTERNET"/> <application android:allowBackup = "true" android:icon = "@mipmap/ic_launcher" android:label = "@string/app_name" android:roundIcon = "@mipmap/ic_launcher_round" android:supportsRtl = "true" android:theme = "@style/AppTheme"> <activity android:name = ".MainActivity"> <intent-filter> <action android:name = "android.intent.action.MAIN" /> <category android:name = "android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
Hãy thử chạy ứng dụng của bạn. Tôi giả sử bạn đã kết nối thiết bị Di động Android thực tế với máy tính của mình. Để chạy ứng dụng từ android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào Chạy biểu tượng từ thanh công cụ. Chọn thiết bị di động của bạn làm tùy chọn, sau đó kiểm tra thiết bị di động sẽ hiển thị màn hình mặc định của bạn.