2

我有一个自定义列表视图,我想在其中膨胀三种不同的布局。

我见过很多问题,但它们都是奇数和偶数位置,但在我的 listView 中,应该膨胀到 listView 的布局取决于其他条件及其动态

如果 (i == 0) 我得到第一个布局被膨胀,如果 (i==1) 第二个等等,

变量“i”等于我从主活动中获得的值。

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

4 回答 4

1

getItemViewType必须返回一个从 0 到 的数字getViewTypeCount

于 2013-05-17T06:49:43.007 回答
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);
                    }
            }
    }
于 2013-05-17T07:01:15.693 回答
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;
    }
}

您可以通过定义视图持有者来优化并使滚动平滑:也试试这个

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

于 2013-05-17T06:45:45.053 回答
0

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

于 2013-05-17T06:53:40.177 回答