LayoutInflater的Android上下文

问题描述 投票:0回答:3

我和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使用什么样的上下文?

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

view = LayoutInflater.from(context).inflate(R.layout.list_folder_item, viewGroup);
android listview layout-inflater
3个回答
2
投票

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

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

他们像这样夸大你的观点

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

0
投票

你必须在Adapter类Context context中创建constructor的实例然后使用这个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;
        }

0
投票

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

您必须传递主要活动上下文。试试这个,

使用:

主要内容:

    adapter = new SaleItemAdapter(this);

SaleItemAdapter:

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

代替

主要内容:

    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;
}
© www.soinside.com 2019 - 2024. All rights reserved.