我和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);
首先,你必须像这样初始化LayoutInflater
LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
他们像这样夸大你的观点
view = mInflater.inflate(R.layout.your_layout, null);
你必须在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;
}
我必须为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;
}