如何在ListView中扩展三个布局?

时间:2013-05-17 06:19:24

标签: android listview layout row inflate

我有一个自定义listView,我想在其中夸大三种不同的布局。

我看过很多问题,但它们都是针对奇数和偶数的位置但是在我的listView中应该充分扩展到listView的布局取决于其他条件及其动态类似

if(i == 0)我得到第一个要膨胀的布局,如果(i == 1)第二个布局,依此类推,

变量“i”等于我从主Activity中得到的值。

public class SocialListAdapter extends ArrayAdapter<Item> {


private Activity activity;
private List<Item> items;
private Item objBean;
private int row;
private int i;


public SocialListAdapter(Activity act, int resource, List<Item> arrayList) {
    super(act, resource, arrayList);
    // TODO Auto-generated constructor stub
    this.activity= act;
    this.items = arrayList;
    this.row = resource;

}

@Override
public int getViewTypeCount() {
    return 2;
}

@Override
    public int getItemViewType(int position) {
    return position;


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

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View view = convertView;
    ViewHolder holder;
    objBean = items.get(position);


        i = objBean.getI();


            if (view == null) {

                LayoutInflater inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);



        if(i == 0){

            view = inflater.inflate(R.layout.list, null);

        }  else if (i == 1){
            view = inflater.inflate(R.layout.row1, null);
        }
            holder = new ViewHolder();
            view.setTag(holder);
            } else {
                holder = (ViewHolder) view.getTag();
            }

我试过这段代码,但是工作......

当我滚动listView arrayoutofbondexception

时出现错误

4 个答案:

答案 0 :(得分:1)

getItemViewType必须返回0到getViewTypeCount之间的数字。

答案 1 :(得分:0)

试试这个:

public class CustomAdapter extends BaseAdapter {

    private ArrayList<String> comments; 
    Context mContext;

    public CustomAdapter(Context context, ArrayList<String> comments) {
        this.mContext = context;
        this.comments = comments;       
    }


    public View getView(final int position, View convertView, ViewGroup parent){

        String item = comments.get(position);

        if (getItemViewType(position) == 0) {

            View v = convertView;
            if (v == null) {

                //GET View 1
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.item_comment2, null);

                v = viewGroup;
            } 

            //Fill Data for Ist view 
            TextView comm = (TextView) v.findViewById(R.id.comment);
            comm.setText(item);

            return v;


        } else if (getItemViewType(position) == 1) {


            View v = convertView;
            if (v == null) {

                //GET View 2
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.item_comment1, null);


                v = viewGroup;
            }

            //Fill Data for IInd view 
            TextView comm = (TextView) v.findViewById(R.id.comment);
            comm.setText(item);

            return v;

        } else {

            //GET View 3
            View v = convertView;
            if (v == null) {
                LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.item_comment3, null);


                v = viewGroup;
            }

            //Fill Data for IInd view 
            TextView comm = (TextView) v.findViewById(R.id.comment);
            comm.setText(item);

            return v;

        }

    }

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

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

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

    @Override
    public int getViewTypeCount() { 
        return 2;
    }

    @Override
    public int getItemViewType(int position) {

        if(position == 0)
            return 0;
        else if (position == 1)
            return 1;
        else 
            return 2;
    }
}

您可以通过定义视图持有者来优化和平滑滚动: 再试一次this

在getItemViewType中,您可以设置条件,以显示哪种类型的视图。

答案 2 :(得分:0)

在getView方法中使用“if(position == 0)”

答案 3 :(得分:0)

您可以检查条件并夸大所需的布局。 这是一个例子。我有三个类别,取决于它我膨胀不同的布局。

   public class ApplicationAdapter extends BaseAdapter
    {
        private Context cntx;

        /**
         * 0 - featured 1- Top rated 2- other
         */
        private int whichCategory;

        /**
         * Constructor
         * 
         * @param context
         * @param iwhichCategory
         *            0 - featured 1- Top rated 2- other
         */

        public ApplicationAdapter(Context context, int iwhichCategory)
            {
                cntx = context;

                whichCategory = iwhichCategory;

            }

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

        @Override
        public Object getItem(int position)
            {
                return null;
            }

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


        @Override
        public View getView(int position, View convertView, ViewGroup parent)
            {
                if (convertView == null)
                    {
                        // This a new view we inflate the new layout
                        LayoutInflater inflater = (LayoutInflater) cntx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        if (whichCategory == 0)
                            convertView = inflater.inflate(R.layout.featured_app_grid_item, parent, false);
                        if (whichCategory == 1)
                            convertView = inflater.inflate(R.layout.other_app_grid_item, parent, false);
                        if (whichCategory == 2)
                            convertView = inflater.inflate(R.layout.other_app_grid_item1, parent, false);
                    }
            }
    }