【问题标题】:Why does the base parameter give an error in the layout inflator?为什么 base 参数在布局充气机中会出错?
【发布时间】:2016-05-03 14:52:02
【问题描述】:

我正在创建一个自定义 BaseAdapter 类,

public class CustomAdapter extends BaseAdapter {

    Context c;
    ArrayList<String> items;

    CustomAdapter(Context c,ArrayList<String> items)
    {

        this.c=c;
        this.items=items;

    }

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

    @Override
    public Object getItem(int i) {
        return items.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        View v= view;
        TextView tv;
        LayoutInflater layoutInflater = (LayoutInflater)c
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        ViewHolder pattern;

        if(view==null)
        {

            v = layoutInflater.inflate(R.layout.dummy,viewGroup,true);



            tv = (TextView)v.findViewById(R.id.textView);

            pattern = new ViewHolder(v);
            v.setTag(pattern);
        }
        else{
            pattern = (ViewHolder)v.getTag();
            return v;
        }

        pattern.tv.setText(items.get(i));



        return v;
    }
}

我收到此错误,

addView(View, LayoutParams) is not supported in AdapterView

这是因为我在这段代码中传递了一个true

v = layoutInflater.inflate(R.layout.dummy,viewGroup,true);

我的问题是为什么当我们在这里通过 true 时会出现错误? BaseAdapter不接受吗?

【问题讨论】:

    标签: android baseadapter layout-inflater


    【解决方案1】:

    inflate 方法中的布尔参数确定是否应将创建的视图添加到您作为第二个参数提供的 ViewGroup 中。 doc

    由于您的第二个参数是 AdapterView,Android 将尝试将视图直接添加到 AdapterView。 但是AdapterView不支持addView()方法ref

    您不应该在 getView() 方法中将视图直接添加到 ViewGroup 中。把它退回去就可以了。

    【讨论】:

    • 第二个参数是ListView吧?怎么可能是Adapterview?
    • 因为 ListView 是一个 AdapterView 继承方式。 ListView 及其祖先不会覆盖此方法 - 可能是为了防止误用;)
    • 所以您的意思是我们不能将视图添加到列表视图或适配器视图?
    • 不是通过 addView(...) 方法。您应该编写创建这些视图的适配器。如果视图变得可见并且可以重用现有实例,框架将负责将视图添加到列表中。
    • 现在明白了,我们只需要定义视图,android 系统会负责将它们添加到列表中。
    猜你喜欢
    • 2016-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-13
    • 2022-06-23
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多