如何在ListView中嵌入ViewPager

最近2個月一直忙着做項目,一個是挑戰杯的互聯網專項賽事,最終獲得了國家三等獎。另一個是湖南省程序設計大賽應用開發類。終於忙完了。其中需要在listview中嵌入viewpager。於是網上學習了下。主要在第一個item中加入viewpager。


這裏貼出適配器的代碼

package zero.com.nweq.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.List;

import zero.com.nweq.R;
import zero.com.nweq.beans.House;

/**
 * 首頁適配器
 * Created by 鄧慧 on 15/7/1.
 */
public class HomeAdapter extends BaseAdapter {

    private static final int TYPE_LISTVIEW = 0;
    private static final int TYPE_VIEWPAGER = 1;
    private static final int TYPE_COUNT = 2;

    private Context context;
    private List<House> list;
    private View viewpager;


    public HomeAdapter(Context c,List<House> list){
        super();
        this.context =c;
        this.list =list;
    }

    /**
     * 因爲第一個不計算在內,估總數減1
     * @return    */
    @Override
    public int getCount() {
        return list.size()-1;
    }

    /**
     * 判斷位置返回不同對象
     * @param position
     * @return
     */
    @Override
    public Object getItem(int position) {
        if(position == 0){
            return viewpager;
        }else{
            return list.get(position-1);
        }
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    /**
     * 主要方法
     * @param position
     * @param convertView
     * @param parent
     * @return
     */
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Holder holder = null;
        House house = null;
        switch (getItemViewType(position)) {
            case TYPE_LISTVIEW:
                house = list.get(position);
                if (convertView == null) {
                    holder = new Holder();
                    convertView = LayoutInflater.from(context).inflate(R.layout.theme_list_view_item, null);
                    holder.img = (ImageView) convertView.findViewById(R.id.theme_house_img);
                    holder.name = (TextView) convertView.findViewById(R.id.theme_house_name);
                    holder.place = (TextView) convertView.findViewById(R.id.theme_house_place);
                    holder.time = (TextView) convertView.findViewById(R.id.theme_house_time);
                    holder.theme = (TextView) convertView.findViewById(R.id.theme_house_theme);

                    convertView.setTag(holder);
                } else {
                    holder = (Holder) convertView.getTag();
                }
                break;
            
            case TYPE_VIEWPAGER:
                if (convertView == null) {
                    convertView = viewpager;
                }
                return convertView;
        }

        //之所以要減一,是因爲複用convertView時,要排除第一個位置
        if (viewpager != null){
            position--;
        }

        holder.img.setImageResource(house.getImageId());
        holder.name.setText(house.getHouseName());
        holder.place.setText(house.getHousePlace());
        holder.time.setText(house.getTime());
        holder.theme.setText(house.getTheme());

        return convertView;
    }

    /**
     * 提供方法從外部設置佈局,這裏可以設置不同的自定義Header佈局,不僅僅是ViewPager
     * @param view
     */
    public void setViewpager(View view){
        viewpager = view;
    }

    /**
     * 獲取不同的佈局類型
     * @param position
     * @return
     */
    @Override
    public int getItemViewType(int position) {
        if(viewpager != null){
            return position > 0 ? TYPE_LISTVIEW : TYPE_VIEWPAGER;
        }else{
            return TYPE_LISTVIEW;
        }
    }

    /**
     * Item佈局總樣數
     * @return
     */
    @Override
    public int getViewTypeCount() {
        return TYPE_COUNT;
    }

    public class Holder{
        ImageView img;
        TextView name;
        TextView theme;
        TextView place;
        TextView time;
    }
}


簡短精煉,也是乾貨。

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