Ich kann eine Kopfzeile zu einer Listenansicht hinzufügen, wenn es in der Hauptaktivität ohne Problem ist, aber wenn ich versuche, eine Kopfzeile zur Listview hinzuzufügen, wenn es in einer Async-Aufgabe ist, bekomme ich eine Umwandlung Error. Hier ist der Haupt-Code (es ist in einem Fragment):Android - Hinzufügen einer Kopfzeile zu einer Listenansicht
private List<IssueInfo> lIssueInfoList = null;
private ListView lvIssues;
private View v = null;
TextView tvHeader;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
try
{
v = inflater.inflate(R.layout.open_issues, container, false);
//Set listview of Issues.
lvIssues = (ListView) v.findViewById(R.id.lvIssues);
lvIssues.setOnItemClickListener(viewIssuesListener);
Context c = getActivity().getApplicationContext();
LayoutInflater li = (LayoutInflater)c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ViewGroup vgHeader = (ViewGroup)li.inflate(R.layout.right_layout_header, null);
tvHeader = (TextView)vgHeader.findViewById(R.id.tvRightHeaderText);
//Call Async Task to run in the background.
new LoadIssuesTask().execute();
}
catch (Exception e)
{
Errors.LogError(e);
}
return v;
}
und die ASync Aufgabe:
private class LoadIssuesTask extends AsyncTask<Void, Void, Void> {
ProgressDialog pdDialog = null;
protected void onPreExecute(){
try
{
pdDialog = new ProgressDialog(v.getContext());
pdDialog.setMessage("Loading Issues and Activities, please wait...");
pdDialog.show();
}
catch (Exception e)
{
Errors.LogError(e);
}
}
@Override
protected Void doInBackground(Void... params) {
LoadIssues();
return null;
}
@Override
protected void onPostExecute(Void v) {
lvIssues.addHeaderView(tvHeader);
lvIssues.setAdapter(new IssueInfoAdapter(OpenIssues.this.getView().getContext(), lIssueInfoList));
pdDialog.dismiss();
pdDialog = null;
}
}
Schließlich ist die LoadIssues Methode:
private void LoadIssues(){
IssueInfoCreator IssueCreator = new IssueInfoCreator(OpenIssues.this.getView().getContext(), Integer.parseInt(AppPreferences.mDBVersion));
IssueCreator.open();
tvHeader.setText(OpenIssues.this.getView().getContext().getString(R.string.OpenIssues) + " (" + String.valueOf(IssueCreator.fetchIssueCount()) + ")");
lIssueInfoList = IssueCreator.queryAll();
IssueCreator.close();
}
Hier ist der Fehler Ich erhalte :
03-23 16:46:42.741: E/AndroidRuntime(12805): FATAL EXCEPTION: main
03-23 16:46:42.741: E/AndroidRuntime(12805): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.widget.ListView.clearRecycledState(ListView.java:513)
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.widget.ListView.resetList(ListView.java:499)
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.widget.ListView.setAdapter(ListView.java:442)
03-23 16:46:42.741: E/AndroidRuntime(12805): at com.adacel.SimCareDashboard.OpenIssues$LoadIssuesTask.onPostExecute(OpenIssues.java:107)
03-23 16:46:42.741: E/AndroidRuntime(12805): at com.adacel.SimCareDashboard.OpenIssues$LoadIssuesTask.onPostExecute(OpenIssues.java:1)
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.os.AsyncTask.finish(AsyncTask.java:602)
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.os.AsyncTask.access$600(AsyncTask.java:156)
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:615)
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.os.Handler.dispatchMessage(Handler.java:99)
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.os.Looper.loop(Looper.java:137)
03-23 16:46:42.741: E/AndroidRuntime(12805): at android.app.ActivityThread.main(ActivityThread.java:4424)
03-23 16:46:42.741: E/AndroidRuntime(12805): at java.lang.reflect.Method.invokeNative(Native Method)
03-23 16:46:42.741: E/AndroidRuntime(12805): at java.lang.reflect.Method.invoke(Method.java:511)
03-23 16:46:42.741: E/AndroidRuntime(12805): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-23 16:46:42.741: E/AndroidRuntime(12805): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-23 16:46:42.741: E/AndroidRuntime(12805): at dalvik.system.NativeStart.main(Native Method)
Es geschieht a t diese Zeile:
lvIssues.setAdapter(new IssueInfoAdapter(OpenIssues.this.getView().getContext(), lIssueInfoList));
Irgendwelche Ideen?
UPDATE
@MisterSquonk
Ich bin ziemlich neu Programmierung Androind (nur bei es 1,5 Monate gewesen), so schätze ich die Tipps, wo und wie die Dinge sollten und nicht getan werden sollte, . Ich glaube, ich Ihren Vorschlag richtig umgesetzt, aber ich bin immer einen jetzt sickerte Fehler von Windows .... hier ist der modifizierten LoadIssues und Async Aufgabe:
private String LoadIssues(){
IssueCreator = new IssueInfoCreator(OpenIssues.this.getView().getContext(), Integer.parseInt(AppPreferences.mDBVersion));
IssueCreator.open();
lIssueInfoList = IssueCreator.queryAll();
return OpenIssues.this.getView().getContext().getString(R.string.OpenIssues) + " (" + String.valueOf(IssueCreator.fetchIssueCount()) + ")";
}
private class LoadIssuesTask extends AsyncTask<Void, String, String> {
ProgressDialog pdDialog = null;
protected void onPreExecute(){
try
{
pdDialog = new ProgressDialog(v.getContext());
pdDialog.setMessage("Loading Issues and Activities, please wait...");
pdDialog.show();
}
catch (Exception e)
{
Errors.LogError(e);
}
}
@Override
protected String doInBackground(Void... params) {
return LoadIssues();
}
@Override
protected void onPostExecute(String v) {
IssueCreator.close();
tvHeader.setText(v);
lvIssues.addHeaderView(tvHeader);
lvIssues.setAdapter(new IssueInfoAdapter(OpenIssues.this.getView().getContext(), lIssueInfoList));
pdDialog.dismiss();
pdDialog = null;
}
}
Ist das richtig?
Ich machte diese Änderungen, aber immer noch den gleichen Fehler .... nicht ganz sicher, was hier vor sich geht ... – Robert