我正在尝试在onResponse请求中使用适配器,但是当我必须将上下文传递给适配器时,我遇到了一些问题。
这是错误:
CodiciAdapter 中的 CodiciAdapter(( 不能应用于:预期 参数:实际参数:上下文:android.content.上下文 这(匿名。编码>>(项: .java。。Codici> R.layout.activity_listview (int( 响应(Java.科迪奇>(
这是我的要求:
Override
public void onResponse(List<Codici> response) {
//ArrayAdapter adapter = new ArrayAdapter<String>(this,
// R.layout.activity_listview, mobileArray);
ListView listView = (ListView) findViewById(R.id.codici_list);
CodiciAdapter codiciAdapter = new CodiciAdapter(this, R.layout.activity_listview, response); //what should I use instead of this??
listView.setAdapter(codiciAdapter);
}
这是我的适配器:
public class CodiciAdapter extends BaseAdapter {
private Context context;
private final List<Codici> items;
public CodiciAdapter(Context context, List<Codici> items) {
this.context = context;
this.items = items;
}
@Override
public int getCount() {
return this.items.size();
}
@Override
public Codici getItem(int position) {
return this.items.get(position);
}
@Override
public long getItemId(int position) {
return this.items.get(position).hashCode();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Codici item = getItem(position);
LayoutInflater inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(convertView == null) {
// If convertView is null we have to inflate a new layout
convertView = inflater.inflate(R.layout.activity_listview, null);
final CodiciViewHolder viewHolder = new CodiciViewHolder();
viewHolder.name = (TextView) convertView.findViewById(R.id.name);
// We set the view holder as tag of the convertView so we can access the view holder later on.
convertView.setTag(viewHolder);
}
// Retrieve the view holder from the convertView
final CodiciViewHolder viewHolder = (CodiciViewHolder) convertView.getTag();
// Bind the values to the views
viewHolder.name.setText(item.getName());
return convertView;
}
}
CodiciAdapter的第一个参数是Context
。 See CodiciAdapter(Context context, List<Codici> items)
.
因此,当您在内部类中使用this
时this
将指向当前类而不是外部类。
解决方案是,如果此类是 活动 . 然后使用以下代码并删除额外的参数 R.layout.activity_listview
。
Override
public void onResponse(List<Codici> response) {
ListView listView = (ListView) findViewById(R.id.codici_list);
CodiciAdapter codiciAdapter = new CodiciAdapter(YourActivityName.this, response);
listView.setAdapter(codiciAdapter);
}
或者在其他情况下,您需要提供Context
。
只需从构造函数中删除布局文件
CodiciAdapter codiciAdapter = new CodiciAdapter(this,response);