android圖文混排與多種類型listView的混搭的item的demo,getItemViewType()和getViewTypeCount()的使用

工作中經常遇到一個listView裏面的item是不同樣式的,以前考慮的是在getView實現不同的樣式,那樣的話效率應該低,也沒有那麼方便,下面就把最近新學到的東西整理下。就是圖文混排的一個listView 其實很簡單。

主要是getItemViewType()和getViewTypeCount()的使用



實體數據類   很簡單   



創建mainActivity




代碼很簡單,ItemData是一個實體bean類,裏面只有一個id,和一個type都是int類型,和一個構造方法  MainActivity主要是設置數據list  和 設置adapter    



三個Xml佈局主要用來顯示三種不同類型的item 其中一個圖片  item_imageview.xml 和一個文本  item_text.xml  和一個按鈕 item_button.xml




/**

主要的adapter

*/

public class ImageTextAdapter extends BaseAdapter implements View.OnClickListener {


    private Context mContext;//上下文
    private ArrayList<ItemData> mList;//MainActivity傳過來的數據
    private LayoutInflater mInflater;//用來加載佈局

    public ImageTextAdapter(Context context, ArrayList<ItemData> mList) {
        this.mContext = context;
        this.mList = mList;
        mInflater = LayoutInflater.from(mContext);
    }


/**

主要是這個方法  雖然很簡單 ,但是很實用,且容易被忽視。

  這個方法是adapter裏面可以重寫的得到item的類型  

   返回的是根據position得到數據裏的類型

*/

    @Override
    public int getItemViewType(int position) {
        return mList.get(position).type;
    }

/**

得到類型的條數  也就是說 這個listView一共支持幾種類型的展示形式

可以理解成是要加載幾個item的xml文件

*/
    @Override
    public int getViewTypeCount() {
        return mList.size();
    }


    @Override
    public int getCount() {
        return mList.size();
    }


    @Override
    public Object getItem(int position) {
        return mList.get(position);
    }


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

/**

主要是這個方法在返回的時候可以進行邏輯的處理,根據需求返回需要的樣式

*/
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder=null;
        int type=getItemViewType(position);//根據Position得到類型


        if (convertView==null){
            holder=new ViewHolder();

//根據類型設置viewHoder
            if (type==1){
                convertView=mInflater.inflate(R.layout.item_imageview,null);
                holder.imageView= (ImageView) convertView.findViewById(R.id.imageView);
                holder.imageView2= (ImageView) convertView.findViewById(R.id.imageView2);
            }else if(type==2){
                convertView=mInflater.inflate(R.layout.itme_text,null);
                holder.textView= (TextView) convertView.findViewById(R.id.tv_item);
            }else {
                convertView=mInflater.inflate(R.layout.itme_button,null);
                holder.button= (Button) convertView.findViewById(R.id.button);
            }
            convertView.setTag(holder);
        }else{
            holder= (ViewHolder) convertView.getTag();
        }


 //根據類型做相應的邏輯處理或者顯示不同的數據頁面內容
        if(1==type){
            holder.imageView.setOnClickListener(this);
            holder.imageView2.setOnClickListener(this);
            holder.imageView.setTag(position);
            holder.imageView2.setTag(position);
        }else if(2==type){
            holder.textView.setOnClickListener(this);
            holder.textView.setTag(position);
        }else{
            holder.button.setOnClickListener(this);
            holder.button.setTag(position);
        }




        return convertView;
    }

//展示通過setTag方式彈出吐司 證明可以實現
    @Override
    public void onClick(View v) {
        int position= (int) v.getTag();
        Toast.makeText(mContext,"position--->"+position,Toast.LENGTH_SHORT).show();
    }




    static class ViewHolder{
        public TextView textView;
        public ImageView imageView;
        public ImageView imageView2;
        public Button button;




    }
}


最終的顯示效果





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