Android的错误,在适配器的ListView:java.lang.ClassCastException [英] Android error with ListView in adapter : java.lang.ClassCastException
问题描述
我面对这个错误的显示列表视图。问题是,在适配器,但我无法找到解决方案。这在我的logcat:
I'm facing this error in displaying a List View. The problem is in the adapter but I couldn't find the solution. This in my logcat :
FATAL EXCEPTION: main
java.lang.ClassCastException: android.app.Application cannot be cast to android.app.Activity
at com.client.alm.WorkItemAdapter.getView(WorkItemAdapter.java:47)
at android.widget.AbsListView.obtainView(AbsListView.java:2159)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1246)
at android.widget.ListView.onMeasure(ListView.java:1158)
at android.view.View.measure(View.java:15513)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827)
这是我的适配器:
And this is my adapter :
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.client.alm.model.WorkItem;
import com.client.alm.model.WorkItemContainer;
public class WorkItemAdapter extends ArrayAdapter<WorkItem> {
private WorkItemContainer container;
private Context context;
int layoutResourceId;
public WorkItemAdapter(Context context, int layoutResourceId,
WorkItemContainer container) {
super(context, layoutResourceId,container.getWorkitems());
this.layoutResourceId = layoutResourceId;
this.context = context;
this.container = container;
}
static class ViewHolder {
ImageView imageType;
TextView type;
TextView priority;
ImageView imagePriority;
TextView key;
ImageView imageStatus;
TextView status;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageType = (ImageView) row
.findViewById(R.id.imageTypeWorkitem);
holder.type = (TextView) row.findViewById(R.id.typeWorkitem);
holder.imagePriority = (ImageView) row
.findViewById(R.id.imagePriority);
holder.key = (TextView) row.findViewById(R.id.key);
holder.imageStatus = (ImageView) row.findViewById(R.id.imageStatus);
holder.status = (TextView) row.findViewById(R.id.status);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
WorkItem workitem = container.getWorkitems().get(position);
holder.type.setText(workitem.getType());
// holder.imageType.setImageResource(workitem.getIcon());
holder.priority.setText(workitem.getPriority());
holder.key.setText(workitem.getKey());
holder.status.setText(workitem.getStatus());
return row;
}
}
这是我的活动:
import java.lang.reflect.Type;
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import com.client.alm.model.WorkItem;
import com.client.alm.model.WorkItemContainer;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
public class WorkItemActivity extends Activity {
/** Called when the activity is first created. */
// Progress Dialog
private ProgressDialog pDialog;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wokitemlist);
new LoadWorkitem().execute();
}
/**
* Background Async Task to Load all Workitems by making HTTP Request
* */
class LoadWorkitem extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(WorkItemActivity.this);
pDialog.setMessage("Loading Workitems ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting JSON
* */
@Override
protected String doInBackground(String... params) {
RestClient rc = new RestClient(
"http://10.0.2.2:8080/SpringRestWebServices/rest/workitem/getworkitem");
try {
rc.Execute(RequestMethod.GET);
} catch (Exception e) {
e.printStackTrace();
}
return rc.getResponse();
}
/**
* After completing background task Dismiss the progress dialog
* **/
@Override
protected void onPostExecute(String resultat) {
// dismiss the dialog after getting all products
pDialog.dismiss();
Gson gson = new Gson();
WorkItemContainer container = gson.fromJson(resultat,
WorkItemContainer.class);
/**
* Updating parsed JSON data into ListView
* */
WorkItemAdapter adaptateur = new WorkItemAdapter(
getApplicationContext(), R.layout.workitemitem, container);
ListView listViewWorkitem = (ListView) findViewById(R.id.list);
listViewWorkitem.setAdapter(adaptateur);
super.onPostExecute(resultat);
}
}
}
我将不胜AP preciate你的帮助。提前致谢。
I would greatly appreciate your help. Thanks in advance.
推荐答案
在您的适配器的变化
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
与
LayoutInflater inflater = LayoutInflater.from(context);
我也想移动从 getView
此行类的构造函数,所以你怎么称呼它只是一个时间。
I would also move this line from the getView
to the class constructor, so you call it just one time.
但无论如何,成也@geeth尖,它的一个很好的实践与活动实例适配器
环境不是应用
否则为1,你可以有一些奇怪的行为(例如,如果你的活动是主题,使用应用程序上下文错误的主题将被应用到你的的ListView
行)
But anyway, as also @geeth pointed, its a good practice to instantiate your adapter with the Activity
context instead the Application
one otherwise you could have some strange behaviour (for instance, if you activity is themed, using application context the wrong theme would be applied to your ListView
rows)
这篇关于Android的错误,在适配器的ListView:java.lang.ClassCastException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!