您好,我有以下代码,它使用我使用 Retrofit http 客户端接收到的数据填充 ListView 。
listView = (ListView) findViewById(R.id.list_item_details);
if (mlabAPi.isEmpty()) {
Toast.makeText(getApplicationContext(), "Please obtain your API KEY from!", Toast.LENGTH_LONG).show();
return;
}
ApiInterface apiService =
MlabApiClient.getClient().create(ApiInterface.class);
Call<List<Trail>> call = apiService.byTrailID(countyString,mlabAPi);
call.enqueue(new Callback<List<Trail>>() {
@Override
public void onResponse(Call<List<Trail>> call, Response<List<Trail>> response) {
int statusCode = response.code();
List<Trail> trails = response.body();
listView.setAdapter(new WalkDetailsAdapter(trails,R.layout.list_item_details, )); **<-HERE**
}
@Override
public void onFailure(Call<List<Trail>> call, Throwable t) {
// Log error here since request failed
Log.e(TAG, t.toString());
}
});
这给了我错误错误:(127、60)错误:不兼容的类型:无法将列表转换为上下文。
我认为错误是 listView.setAdapter 的第三个参数,有谁知道我必须添加的第三个参数是什么, (我尝试了 getApplicatinonContext,因为那是我在填充 recyclerview 时使用的。)什么是 listview 等价物?
谢谢。
步行细节适配器
public class WalkDetailsAdapter extends ArrayAdapter<Trail> {
private Context context;
private List<Trail> values;
public WalkDetailsAdapter ( Context context, List<Trail> values){
super(context, R.layout.list_item_details, values);
this.context = context;
this.values = values;
}
@Override
public View getView (int position, View convertView, ViewGroup parent)
{
View row = convertView;
if (row == null)
{
LayoutInflater inflater =
(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item_details, parent, false);
}
TextView textViewName = (TextView) row.findViewById(R.id.name);
TextView textViewCounty = (TextView) row.findViewById(R.id.county);
TextView textViewFormat = (TextView) row.findViewById(R.id.format);
TextView textViewTime = (TextView) row.findViewById(R.id.time);
TextView textViewLength = (TextView) row.findViewById(R.id.length);
//TextView textViewGrade = (TextView) row.findViewById(R.id.grade);
TextView textViewDifficultly = (TextView) row.findViewById(R.id.diffuctlty);
TextView textViewQuality= (TextView) row.findViewById(R.id.quality);
TextView textViewStart = (TextView) row.findViewById(R.id.start);
TextView textViewFinish = (TextView) row.findViewById(R.id.finish);
Trail item = values.get(position);
String trail = item.getTrailName();
textViewName.setText(trail);
String county = item.getCounty();
textViewCounty.setText(county);
String format = item.getFormat();
textViewFormat.setText(format);
String time = item.getTime();
textViewTime.setText(time);
String length = item.getDistance();
textViewLength.setText(length);
String diff = item.getGrade();
textViewDifficultly.setText(diff);
String quality = item.getQuality();
textViewQuality.setText(quality);
String start = item.getStartTown();
textViewStart.setText(start);
String finish = item.getFinishTown();
textViewFinish.setText(finish);
return row;
}
}
最佳答案
只要切换这个
listView.setAdapter(new WalkDetailsAdapter(trails,R.layout.list_item_details, ));
对此
listView.setAdapter(new WalkDetailsAdapter(getApplicationContext(),trails));
问题是在您的 WalkDetailsAdapter 类中,构造函数参数是 Context
和一个 List<Trail>
你向它提供了列表,然后是布局资源。所以只需切换参数,使第一个是使用 getApplicationContext()
的上下文或 getContext()
或 this
取决于类是什么,第二个是 List<Trail>
的实例然后它应该可以工作。
关于java - List<Trail> 无法转换为 Context,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49434165/