【Android學習筆記】ListView的用法
基本使用
創建工程ListViewTestProject,工程結構如下:
編輯MainActivity的界面代碼,添加ListView組件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
編輯MainActivity代碼,初始化數組Data,并為ListView添加適配器:
package com.example.listviewtestproject;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends AppCompatActivity {
private String[] data = new String[26];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化data數據
initData();
//android.R.layout.simple_list_item_1是安卓內置的布局文件,data是包含數據的數組
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,data);
ListView listView = findViewById(R.id.list_view);
//為ListView添加適配器
listView.setAdapter(adapter);
}
private void initData(){
for(int i='a';i<='z';i++){
String s = ""+(char)i+(char)i+(char)i;
data[i-'a'] = s;
}
}
}
運行APP:
接著為其添加點擊事件,點擊ListView的子項時,用Toast顯示當前子項內容:
package com.example.listviewtestproject;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private String[] data = new String[26];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
//android.R.layout.simple_list_item_1是安卓內置的布局文件,data是包含數據的數組
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,data);
ListView listView = findViewById(R.id.list_view);
//為ListView添加適配器
listView.setAdapter(adapter);
//為ListView添加點擊事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
//獲取數組中position位置的元素值,并用Toast展示出來
String s = data[position];
Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();
}
});
}
private void initData(){
for(int i='a';i<='z';i++){
String s = ""+(char)i+(char)i+(char)i;
data[i-'a'] = s;
}
}
}
運行APP,點擊ListView子項:
進階用法
定制ListView界面,每個ListView子項包含一前一后兩個TextView。先創建ListView子項的實例類Model:
package com.example.listviewtestproject;
public class Model {
private String leftString;
private String rightString;
public String getLeftString() {
return leftString;
}
public void setLeftString(String leftString) {
this.leftString = leftString;
}
public String getRightString() {
return rightString;
}
public void setRightString(String rightString) {
this.rightString = rightString;
}
}
接著需要為ListView的子項自定義一個布局文件,在layout目錄下新建model_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:minHeight="?android:attr/listPreferredItemHeightSmall"
>
<TextView
android:id="@+id/left_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical|left"
/>
<TextView
android:id="@+id/right_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center_vertical|right"
/>
</LinearLayout>
然后我們需要創建一個自定義的適配器,新建類ModelAdapter:
package com.example.listviewtestproject;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.List;
public class ModelAdapter extends ArrayAdapter<Model> {
private int resourceId;
public ModelAdapter(Context context, int textViewResourceId,List<Model> objects) {
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
//獲取當前項的Model實例
Model model = getItem(position);
View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
//獲取當前ListView子項的控件
TextView leftTextView =view.findViewById(R.id.left_text);
TextView rightTextView =view.findViewById(R.id.right_text);
leftTextView.setText(model.getLeftString());
rightTextView.setText(model.getRightString());
return view;
}
}
最后修改MainActivity代碼,完成對ListView的界面及數據定制:
package com.example.listviewtestproject;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<Model> modelList = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
ModelAdapter adapter = new ModelAdapter(MainActivity.this,R.layout.model_item,modelList);
ListView listView = findViewById(R.id.list_view);
listView.setAdapter(adapter);
}
private void initData(){
for(int i='a';i<='z';i++){
String leftString = ""+(char)i+(char)i+(char)i;
String rightString = ""+(char)(i-32)+(char)(i-32)+(char)(i-32);
Model model = new Model();
model.setLeftString(leftString);
model.setRightString(rightString);
modelList.add(model);
}
}
}
運行APP,效果如下:
智能推薦
【Android學習筆記】標準廣播的用法
介紹 標準廣播是一種完全異步執行的廣播,在廣播發出之后,所有廣播幾乎都會同時接收到這條廣播消息,因此它們之間沒有任何先后順序可言。這種廣播的效率會比較高,但同時也意味著它是無法被截斷的。 發送標準廣播 創建新的工程NormalBroadcastTestProject,先編輯MainActivity的布局文件,放置一個發送標準廣播的按鈕: 然后編輯MainActivity的代碼,為按鈕添加點擊事件,...
【Android學習筆記】Fragment的用法
介紹 碎片(Fragment)是一種可以嵌入在活動之間的UI片段,它可以讓程序更加合理和充分地利用大屏幕的空間,由于它和活動非常相似,也可以將它簡單地理解成一個迷你的活動。 基本用法 新建一個FragmentTestProject工程,創建一個左側布局文件left_fragment.xml,內容如下: 然后新建右側碎片布局文件right_fragment.xml,背景色設為紅色并為其添加一個Tex...
【Android學習筆記】RecyclerView的用法
介紹 由于ListView存在各種不足并且無法實現橫向滾動,Android提供了一個更強大的滾動組件——RecyclerView,不僅可以輕松實現和ListView同樣的效果,還優化了ListView中存在的各種不足之處。 基本用法 創建一個工程RecyclerViewTestProject,首先需要為項目添加RecyclerView相應的依賴庫,修改app/build.g...
Android之ListView學習筆記--ListView基本使用
ListView算是我們平時經常使用到的一個工具了(當然現在有RecyclerView作為代替),之前一篇講到ListView中的RecycleBin回收機制,這一篇先來大致講一下ListView里面的一些用法吧。 ListView布局 在布局里面設置下ListView就可以了。對于ListView而言,里面的子view的布局只有一種,就是垂直布局。而在RecyclerView中對此進行了改進,支...
Android 學習筆記 -- ListView+MySQL
正式看此文章前,請先瀏覽https://blog.csdn.net/weixin_44462664/article/details/102565639 實現登陸后在下個活動中顯示ListView 在 包名下 ? New ? 新建實體類 Item.java 文件 在layout目錄下 ? New ? XML ? Layout XML File 新建 item.xml布局文件作為ListView子項的...
猜你喜歡
Android組件學習筆記(ListView結構操作)
跟著教程學習中,記下筆記 這次實現一個簡單類似電話簿的東西,不過使用了內部類,和一些比較快捷的結構操作 具體參數可自主調整 實現圖片: 代碼實現:有兩個布局文件: 一個總的,一個只是做出摸板,代碼: 和:...
Android studio教程學習筆記10——ListView
列表視圖ListView 在實際開發中實現列表、網格視圖,多用RecyclerView,這個ListView了解就行 常用屬性 Adapter接口 Demo演示 LayoutInflater類:(抽象類),將布局xml文件實例化為對應的View對象 View對象:可以暫時理解為一個頁面所有組件的一個超類 新建一個包: 之前都是直接新建empty activity,為了熟悉流程,現在自己從頭開始創建...
ListView的基礎用法
最近學到ListView和RecyclerView,感覺有點難理解,于是自己找到了篇文章,感覺寫的挺詳細的(文章鏈接在文末),然后自己再整理敲了跑了一遍,總結了一下,方便自己以后回頭溫習。 一個ListView的創建需要三個元素 ListView每一列的View 填入View的每一項數據(圖片,文字等) 連接數據與ListView的適配器 什么是適配器? 適配器是一個連接數據和AdapterVie...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...