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;
}
我有一个 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;
}