Android LayoutInflater 上下文

Android context for LayoutInflater

我有一个 activity 和 ListView

ListView 的适配器我从 android.widget.BaseAdapter:

创建
public class SaleItemAdapter extends BaseAdapter {

...

    @Override
    public View getView(int position, View view, ViewGroup viewGroup) {
        SaleItem saleItem = saleItems.get(position);
        if (saleItem.getFolder()) {
            view = LayoutInflater.from(context).inflate(R.layout.list_folder_item, viewGroup);
            TextView nameFolder = view.findViewById(R.id.nameFolder);
            nameFolder.setText(saleItem.getName());
        } else {
            view = LayoutInflater.from(context).inflate(R.layout.list_sale_item, viewGroup);
        }
        return view;
    }

问题是:我必须为 LayoutInflater 使用什么样的上下文?

在实例化适配器对象 adapter = new SaleItemAdapter(this.getApplicationContext()); 时,我尝试使用 activity 中的 getApplicationContext(),但在这行代码之后导致我的应用程序崩溃:

view = LayoutInflater.from(context).inflate(R.layout.list_folder_item, viewGroup);

首先你必须像这样初始化 LayoutInflater

LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

他们会像这样夸大你的观点

view = mInflater.inflate(R.layout.your_layout, null);

您必须在适配器 class constructor 中创建 Context context 的实例,然后使用此 context 在代码

下方进行布局检查
        public class SaleItemAdapter extends BaseAdapter {
  private Context context;

    ...
        public DischargeAdapter(Context context){
        this.context = context;

    }

        @Override
        public View getView(int position, View view, ViewGroup viewGroup) {
            SaleItem saleItem = saleItems.get(position);
            if (saleItem.getFolder()) {
                view = LayoutInflater.from(context).inflate(R.layout.list_folder_item, viewGroup);
                TextView nameFolder = view.findViewById(R.id.nameFolder);
                nameFolder.setText(saleItem.getName());
            } else {
                view = LayoutInflater.from(context).inflate(R.layout.list_sale_item, viewGroup);
            }
            return view;
        }

我必须为 LayoutInflater 使用什么样的上下文?

您必须传递主 activity 上下文。试试这个,

使用:

MainActivity:

    adapter = new SaleItemAdapter(this);

SaleItemAdapter:

    view = LayoutInflater.from(context).inflate(R.layout.list_sale_item, null);

而不是

MainActivity:

    adapter = new SaleItemAdapter(this.getApplicationContext());

SaleItemAdapter:

    view = LayoutInflater.from(context).inflate(R.layout.list_sale_item, viewGroup);

您的 SaleItemAdapter 应该定义一个构造函数,

   public class SaleItemAdapter extends BaseAdapter {
   private Context mContext;

    public SaleItemAdapter (Context context){
    mContext = context;
    }

@Override
public View getView(int position, View view, ViewGroup viewGroup) {
    SaleItem saleItem = saleItems.get(position);
    if (saleItem.getFolder()) {
        view = LayoutInflater.from(mContext).inflate(R.layout.list_folder_item, null);
        TextView nameFolder = (TextView) view.findViewById(R.id.nameFolder);
        nameFolder.setText(saleItem.getName());
    } else {
        view = 
    LayoutInflater.from(mContext).inflate(R.layout.list_sale_item, null);
    }
    return view;
}