當我嘗試打開由listview組成的片段時,我的應用程序崩潰。嘗試使用列表視圖打開片段時應用程序崩潰
場景:
打開fragmentA首次,列表視圖不顯示。
單擊fragmentA上的按鈕(即片段B)。
點擊後退按鈕,同時在fragmentB上顯示fragmentA上的listview。
退出應用程序,嘗試再次打開fragmentA,應用程序崩潰。
我的片段類:
public class FamilyTreeFragment extends Fragment {
// Declare Variables
ListView listview;
List<ParseObject> ob;
ProgressDialog mProgressDialog;
FamilyTreeListViewAdapter adapter;
private List<FamilyTree> familytreelist = null;
View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_familytree, container, false);
new RemoteDataTask().execute();
// Locate the listview in listview_main.xml
listview = (ListView) rootView.findViewById(R.id.list);
// Pass the results into ListViewAdapter.java
// adapter = new FamilyTreeListViewAdapter(getActivity(), familytreelist);
// Binds the Adapter to the ListView
// listview.setAdapter(adapter);
// Close the progressdialog
mProgressDialog.dismiss();
// btn_add
Button btn_add = (Button) rootView.findViewById(R.id.btn_add);
btn_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
// Toast.makeText(SuggestionsFragment.this.getActivity(),
// "You have selected Parks.", Toast.LENGTH_SHORT).show();
getFragmentManager().beginTransaction().replace(R.id.container, new FamilyTreeFragment2()).addToBackStack(null).commit();
}
});
return rootView;
}
// RemoteDataTask AsyncTask
private class RemoteDataTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Create a progressdialog
mProgressDialog = new ProgressDialog(getActivity());
// Set progressdialog title
mProgressDialog.setTitle("");
// Set progressdialog message
mProgressDialog.setMessage("Loading...");
mProgressDialog.setIndeterminate(false);
// Show progressdialog
mProgressDialog.show();
}
protected Void doInBackground(Void... arg0) {
// Create the array
familytreelist = new ArrayList<FamilyTree>();
try {
// Locate the class table named "Country" in Parse.com
ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("FamilyTree");
// Locate the column named "ranknum" in Parse.com and order list
// by ascending
query.orderByAscending("createdAt");
ob = query.find();
for (ParseObject familytree : ob) {
// Locate images in flag column
ParseFile image = (ParseFile) familytree.get("image");
FamilyTree tree = new FamilyTree();
tree.setName((String) familytree.get("name"));
tree.setRelation((String) familytree.get("relation"));
tree.setImage(image.getUrl());
familytreelist.add(tree);
}
} catch (ParseException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
// Locate the listview in listview_main.xml
listview = (ListView) rootView.findViewById(R.id.list);
// Pass the results into ListViewAdapter.java
adapter = new FamilyTreeListViewAdapter(getActivity(), familytreelist);
// Binds the Adapter to the ListView
listview.setAdapter(adapter);
// Close the progressdialog
// mProgressDialog.dismiss();
}
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/familytreecontainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.parcel.FamilyTreeFragment$PlaceholderFragment" >
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="407dp"
android:layout_weight="2.86" >
</ListView>
<Button
android:id="@+id/btn_add"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Add" />
的logcat:
11-06 17:01:06.500: E/AndroidRuntime(22072): FATAL EXCEPTION: main
11-06 17:01:06.500: E/AndroidRuntime(22072): Process: com.example.parcel, PID: 22072
11-06 17:01:06.500: E/AndroidRuntime(22072): java.lang.NullPointerException
11-06 17:01:06.500: E/AndroidRuntime(22072): at com.example.parcel.FamilyTreeFragment$RemoteDataTask.onPostExecute(FamilyTreeFragment.java:111)
11-06 17:01:06.500: E/AndroidRuntime(22072): at com.example.parcel.FamilyTreeFragment$RemoteDataTask.onPostExecute(FamilyTreeFragment.java:1)
11-06 17:01:06.500: E/AndroidRuntime(22072): at android.os.AsyncTask.finish(AsyncTask.java:632)
11-06 17:01:06.500: E/AndroidRuntime(22072): at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-06 17:01:06.500: E/AndroidRuntime(22072): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
11-06 17:01:06.500: E/AndroidRuntime(22072): at android.os.Handler.dispatchMessage(Handler.java:102)
11-06 17:01:06.500: E/AndroidRuntime(22072): at android.os.Looper.loop(Looper.java:157)
11-06 17:01:06.500: E/AndroidRuntime(22072): at android.app.ActivityThread.main(ActivityThread.java:5867)
11-06 17:01:06.500: E/AndroidRuntime(22072): at java.lang.reflect.Method.invokeNative(Native Method)
11-06 17:01:06.500: E/AndroidRuntime(22072): at java.lang.reflect.Method.invoke(Method.java:515)
11-06 17:01:06.500: E/AndroidRuntime(22072): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-06 17:01:06.500: E/AndroidRuntime(22072): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
11-06 17:01:06.500: E/AndroidRuntime(22072): at dalvik.system.NativeStart.main(Native Method)
我該如何解決這個問題?任何幫助表示讚賞。謝謝。
嗨。我更換了 查看rootView = inflater.inflate(R.layout.fragment_familytree,container,false); 與 rootView = inflater.inflate(R.layout.fragment_familytree,container,false); 並刪除onPostExecute()聲明的列表視圖,它的工作原理!非常感謝! – Alxy 2014-11-06 09:22:54
那麼它給出的仍然是錯誤? – 2014-11-06 09:23:56
它已經在工作。謝謝。 :) – Alxy 2014-11-06 09:25:59