1. 程式人生 > 實用技巧 >Android開發筆記(九)——ListView

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事件,實際開發中可能會跳轉到別的頁面。