我正在使用导航抽屉,Fragment_1拥有一个列表视图,用于搜索gps位置,然后加载适配器。如果我将Fragment_1保持打开直到它完全加载,则该过程正常。但是如果我在Fragment_1搜索位置或加载适配器时尝试打开另一个片段Fragment_2,那么我的应用程序崩溃了。 Fragment_2保留textview,如果单独启动,则可以正常工作。
我正在使用以下代码从抽屉
启动新片段$sql_query = "INSERT INTO user_login (user_mobile, user_email, user_pwd) values('$mobile', '$email', '$password')";
答案 0 :(得分:1)
您应该执行异步任务来加载列表。在替换当前片段之前,只需取消异步任务即可。如果任务未被取消,请确保签入onPostExecute。
在这里,您可以找到将数据异步加载到回收站视图的示例:http://javatechig.com/android/android-recyclerview-example。看看AsyncHttpTask。您可以在doInBackground上查看和解析数据,并显示在onPostExecute中。您还需要在代码中添加以下内容:将所有内容包含在
中的onPostExecute中if (!isCancelled()) {
/* your code here for setting list adapter */
}
在分离时覆盖:
@Override
public void onDetach() {
super.onDetach();
// don't update the UI if user go from this fragment
if (displayResultsAsyncTask != null && !displayResultsAsyncTask.isCancelled())
displayResultsAsyncTask.cancel(true);
}
所以你的代码看起来应该是这样的:
public class YourFragment extends Fragment {
// declare an async task in your fragment
private AsyncTask displayResultsAsyncTask = null;
/* other data here */
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
/* your code for onCreate */
GetAndDisplayResults(); // call display results
}
public void GetAndDisplayResults() {
displayResultsAsyncTask = new AsyncTask<String, Void, Integer>() {
@Override
protected Integer doInBackground(String... params) {
Integer result = 0;
// get and parse data, also set result
return result;
}
@Override
protected void onPostExecute(Integer result) {
if (!isCancelled()) {
// if task wasn't stopped
if (result == 1)
SetYourList(); // set your list adapter based on results returned from doInBackground
}
}
}.execute();
}
@Override
public void onDetach() {
super.onDetach();
// don't update the UI if user go from this fragment
if (displayResultsAsyncTask != null && !displayResultsAsyncTask.isCancelled())
displayResultsAsyncTask.cancel(true);
}
}
用于保存数据的列表可以从doInBackground和onPostExecute声明为globaly并加入,也可以作为参数设置为onPostExecute。
答案 1 :(得分:0)
您似乎试图在commit
,fragmentTransaction
方法中onCreate
onResume
因IllegalStateException: Can not perform this action after onSaveInstanceState
而导致异常activity state loss
1}}。请检查您是否正在执行这些功能。
希望这有帮助。