当我尝试打开由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