自定義Adatper


164950960.jpg

Adatper是什麼呢? 說白了就是連接activity和數據端的橋樑。關於Adapter有很多種,比如SimpleAdapter,ArrayAdapter等等,但是大部分時候這些adapter不能滿足我們開發的需求。所以在這時候,自定adapter就起到了重要的作用,給我們帶來很大的方便。閒話少說,直奔主題:如何使用自定義的Adapter

   

package cn.adapter;
import java.util.List;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import cn.bean.NewsInfos;
import cn.internetdata.R;
/**
 * 自定義adapter的使用
 *
 * @author YSY
 */
// 1。首先創建一個類,來繼承BaseAdapter,從而成爲一個adapter
public class MyAdapter extends BaseAdapter
{
    Context context;
    List<NewsInfos> newsInfos;
    // 重寫其構造方法,裏面有兩個參數Context,List<E> 下面的部分方法中會用到
    public MyAdapter(Context context, List<NewsInfos> newsInfos)
    {
        this.context = context;
        this.newsInfos = newsInfos;
    }
    // 2.添加未實現的方法getCount(), getItem(int position),getItemId(int
    // position),getView(int position, View convertView, ViewGroup parent)
    public int getCount()
    {
        return newsInfos.size();
    }
    @Override
    public Object getItem(int position)
    {
        return newsInfos.get(position);
    }
    @Override
    public long getItemId(int position)
    {
        return position;
    }
    // 此方法最爲重要 返回的對象是一個View
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        Holder holder = null;
        // 爲了節省資源,當子View充滿手機一屏的話,後面的數據就會加載到第一屏的view上
        if (convertView == null)
        {
            // 把一個xml文件轉換成一個View
            convertView = View.inflate(context, R.layout.activity_item, null);
            // 創建一個Holder對象,用來存放holder中定義的各個屬性
            holder = new Holder();
            // 在View中尋找各個控件對象
            holder.title = (TextView) convertView.findViewById(R.id.tv_title);
            holder.date = (TextView) convertView.findViewById(R.id.tv_date);
            // 把holder對象保存在View中
            convertView.setTag(holder);
        } else
        {
            // 直接衝View中取出holder即可
            holder = (Holder) convertView.getTag();
        }
        // 爲holder中的各個對象賦值
        holder.title.setText(newsInfos.get(position).getNewstitle());
        holder.date.setText(newsInfos.get(position).getCreateDate());
        return convertView;
    }
    // 創建一個類,來存放各個控件的對象
    private class Holder
    {
        public TextView title;
        public TextView date;
    }
}


在activity端爲View控件設置數據的時候,一般都會用到adapter,進一步說都要view.setAdapter(adapter);


activity端

view.setAdapter(new MyAdapter());

在上面代碼中的 R.layout.activity_item是自定義的一個xm佈局文件

<?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"
    android:background="#FFFFFF"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/tv_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="標題"
        android:textColor="#ff000000"
        android:textSize="23sp" />
    <TextView
        android:id="@+id/tv_date"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="時間"
        android:textColor="#ff000000"
        android:textSize="23sp" />
</LinearLayout>

其中還可以加入圖片,視屏控件,根據自己需要,添加相應的控件即可






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章