Android開發筆記(九)——ListView
為了更好的屬性流程,這裡從新建package開始,自己手動填寫程式碼(之前直接新建Activity系統會自動幫忙填好程式碼和建立佈局)
新建一個package listview
,在該包下面新建一個Java Class,
在layout下面新建一個 Layout resource file
在 ListViewActivity.java
中把程式碼補全
自己寫的類這裡是不會在 AndroidMainfest.xml
中自動宣告的,這裡需要手動宣告:
<activity android:name=".listview.ListViewActivity"></activity>
之後就和前面的操作一樣啦!在 activity_main.xml
中新增一個button用來跳轉到ListView展示介面,然後在 MainActivity.java
中新增該按鈕的宣告。之後就可以在佈局檔案 activity_list_view.xml
中進行佈局啦。
常用屬性
在佈局檔案 activity_list_view.xml
中的佈局如下:
可以看到列表的初始樣子。
接下來在layout檔案下再新建一個layout resource filer用來設計列表想要展示的內容:
進行佈局,大體佈局如下:
Adapter介面
在ListView包下面新建一個class繼承自 BaseAdapter
public class MyListAdapter extends BaseAdapter { private Context mContext; private LayoutInflater mLayoutInflater; public MyListAdapter(Context context){ this.mContext=context; mLayoutInflater=LayoutInflater.from(context); } @Override public int getCount() { return 10; //列表的行數 } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } static class ViewHolder{ public ImageView imageView; public TextView tvTitle,tvTime,tvContent; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder=null; if(convertView==null){ convertView=mLayoutInflater.inflate(R.layout.layout_list_item,null); holder=new ViewHolder(); holder.imageView=convertView.findViewById(R.id.iv); holder.tvTitle=convertView.findViewById(R.id.tv_title); holder.tvTime=convertView.findViewById(R.id.tv_time); holder.tvContent=convertView.findViewById(R.id.tv_content); convertView.setTag(holder); }else { holder= (ViewHolder) convertView.getTag(); } //給控制元件賦值 holder.tvTitle.setText("這是標題"); holder.tvTime.setText("2025-01-01"); holder.tvContent.setText("這是內容"); Glide.with(mContext).load("http://p1.pstatp.com/large/166200019850062839d3").into(holder.imageView); return convertView; } }
這裡主要重寫了 getView
函式,用來控制每一行的樣式和資料。
在 ListViewActivity.java
中進行對ListView控制元件的宣告:
其中 setAdapter
用來設定一個介面卡, MyListAdapter
是我們自定義的,繼承自 BaseAdapter
。
當前的效果:
自定義選中的效果:
在drawable中新建一個資原始檔,如下:
設定選中時候變為淺綠色:
在 activity_list_view.xml
中新增一句程式碼:
執行一下,此時的效果如下:
點選事件和長按事件
在 ListViewActivity.java
中新增一個事件如下:
執行效果:
這裡長按的時候兩個事件都處理了,只要把 setOnItemLongClickListener
中的 return false
改成 return ture
就可以啦。
這裡只是彈出一個Toast事件,實際開發中可能會跳轉到別的頁面。