ListView实现每行显示两个item(假)

一   介绍 


    1,   该文章并没有实现gridview 的 android:numColumns的功能 ,只能实现gridview 的多item效果

    2 ,     目的是为了借用 listview 添加头部的功能  网上有很多gridview添加头部的实现 但是我有点看不懂,并且我个  人感觉gridview添加头部没有listview添加头部的功能强大。

 二  思路

     1     我们可以在listview的item布局中写入多个item布局水平排列,每个item用layout包裹。  在适配器中按顺序添     加数据。

      2    listview 的item点击事件-------  在适配器中给每个layout添加点击事件  当用户点击layout时利用回调将点击事件得到的数据传递到外面。



(item.xml 代码)


<?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="250dp"
    android:orientation="horizontal">

    <LinearLayout
        android:id="@+id/layout_left"
        android:layout_width="0dp"
        android:layout_height="250dp"
        android:layout_weight="1"
        android:padding="5dp"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/image_legt"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="#fff"
            />

        <TextView
            android:id="@+id/text_left"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:padding="16dp"
            android:background="#fff"
            android:text=" " />
    </LinearLayout>
    <TextView
        android:layout_width="4dp"
        android:layout_height="match_parent"
        android:background="#ccc"/>

    <LinearLayout
        android:id="@+id/layout_right"
        android:layout_width="0dp"
        android:layout_height="250dp"
        android:layout_weight="1"
        android:padding="5dp"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/image_right"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="#fff"
             />

        <TextView
            android:id="@+id/text_right"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:background="#fff"
            android:padding="16dp"
            android:text=" " />
    </LinearLayout>


</LinearLayout>

  adapter 代码  


 
package xwh.qianfeng.com.myapplication;

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

import java.util.ArrayList;
import java.util.List;

/**
 * Created by ~~~~~~  on 2016/11/12.
 */

public class MyListAdapter extends BaseAdapter {
    List<Goods.GoodsListBean> datas;
    CustomOnItemClickListent clickListent;
    protected ViewGroup viewGroup;
    protected int count;
    protected Goods.GoodsListBean data;
    protected View v;
    final int TYPE1 = 0;
    final int TYPE2 = 1;
    int datacount = -1;

    public void setdatas(List<Goods.GoodsListBean> datas) {
     //   datas.remove(0);
        if (datas.size() % 2 == 0) {
            datacount = (datas.size() / 2);
        } else {
            datacount = (datas.size() / 2 + 1);
        }
        this.datas = datas;
    }

    @Override
    public int getCount() {
        if (datas == null) {
            return 0;
        } else {
            int num = (datas.size() % 2);
            int count = datas.size() / 2;
            if (num != 0) {
                datacount = count + 1;
                return (count + 1);
            }
            datacount = count;
            return (count);
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (position + 1 < datacount) {
            return TYPE1;
        } else {
            if (datas.size() % 2 != 0) {
                return TYPE2;
            } else {
                return TYPE1;
            }
        }
    }


    @Override
    public ArrayList<Goods.GoodsListBean> getItem(int position) {

        return null;
    }

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

    @Override
    public View getView(final int position, final View convertView, final ViewGroup parent) {
        int type = getItemViewType(position);
        View view=null;
     //   view=convertView;
        switch (type) {
            case TYPE1:
                 view=convertView;
                ViewHolder viewHolder = null;
                if (view == null || !(view.getTag() instanceof ViewHolder)) {
                    view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null);
                    viewHolder = new ViewHolder(view);
                    view.setTag(viewHolder);
                } else {
                    viewHolder = (ViewHolder) view.getTag();
                }
                viewHolder.textLeft.setText(datas.get(2 * position).getName());
                viewHolder.textRight.setText(datas.get(2 * position + 1).getName());
                XUser.imageSent(viewHolder.imageLegt, datas.get(2 * position).getImage());
                XUser.imageSent(viewHolder.imageRight, datas.get(2 * position + 1).getImage());
                viewHolder.layoutLeft.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickListent.onItemClick(parent, convertView, (position * 2), datas.get((position * 2)));
                    }
                });
                viewHolder.layoutRight.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickListent.onItemClick(parent, convertView, (position * 2 + 1), datas.get((position * 2 + 1)));

                    }
                });

                break;
            case TYPE2:
                 view=new View(parent.getContext());
                ViewHolderType2 holderType2 = null;
                if (view == null || !(view.getTag() instanceof ViewHolder)) {
                    view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_type2, null);
                    holderType2 = new ViewHolderType2(view);
                    view.setTag(holderType2);
                } else {
                    holderType2 = (ViewHolderType2) view.getTag();
                }
                holderType2.textLeftType2.setText(datas.get(2 * position).getName());

                XUser.imageSent(holderType2.imageLegtType2, datas.get(2 * position).getImage());
                holderType2.layoutLeftType2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        clickListent.onItemClick(parent, convertView, (position * 2), datas.get((position * 2)));
                    }
                });
        }
        return view;
    }

    static class ViewHolder {
        protected ImageView imageLegt;
        protected TextView textLeft;
        protected LinearLayout layoutLeft;
        protected ImageView imageRight;
        protected TextView textRight;
        protected LinearLayout layoutRight;

        ViewHolder(View rootView) {
            initView(rootView);
        }

        private void initView(View rootView) {
            imageLegt = (ImageView) rootView.findViewById(R.id.image_legt);
            textLeft = (TextView) rootView.findViewById(R.id.text_left);
            layoutLeft = (LinearLayout) rootView.findViewById(R.id.layout_left);
            imageRight = (ImageView) rootView.findViewById(R.id.image_right);
            textRight = (TextView) rootView.findViewById(R.id.text_right);
            layoutRight = (LinearLayout) rootView.findViewById(R.id.layout_right);
        }
    }

    static class ViewHolderType2 {
        protected ImageView imageLegtType2;
        protected TextView textLeftType2;
        protected LinearLayout layoutLeftType2;

        ViewHolderType2(View rootView) {
            initView(rootView);
        }

        private void initView(View rootView) {
            imageLegtType2 = (ImageView) rootView.findViewById(R.id.image_legt_type2);
            textLeftType2 = (TextView) rootView.findViewById(R.id.text_left_type2);
            layoutLeftType2 = (LinearLayout) rootView.findViewById(R.id.layout_left_type2);
        }
    }
//外部回调接口
    public void setOnItemClickListent(CustomOnItemClickListent customOnItemClickListent) {
        clickListent = customOnItemClickListent;
    }
//内部接口
    public interface CustomOnItemClickListent {
        public void onItemClick(ViewGroup parent, View view, int position, Goods.GoodsListBean data);
    }
}


调用方法

        list = (ListView) findViewById(R.id.list);
        list.setAdapter(adapter);
        adapter.setOnItemClickListent(new MyListAdapter.CustomOnItemClickListent() {
            @Override
            public void onItemClick(ViewGroup parent, View view, int position, Goods.GoodsListBean data) {
                Log.e("点击事件", "   " + position + "   " + data.getName());
            }

        });


main 布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="xwh.qianfeng.com.myapplication.MainActivity">

    <ListView
        android:id="@+id/list"
        android:dividerHeight="4dp"
        android:divider="#ccc"
         android:clickable="false"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </ListView>
</RelativeLayout>




效果图




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值