Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 片段的一半生命周期方法在旋转后未被调用_Android_Android Fragments - Fatal编程技术网

Android 片段的一半生命周期方法在旋转后未被调用

Android 片段的一半生命周期方法在旋转后未被调用,android,android-fragments,Android,Android Fragments,每次旋转屏幕时,我都会经历一种奇怪的碎片生命周期行为。只调用生命周期的前半部分方法,onPause,onSaveInstanceState,onStop,onDestroyView,onDestroy和onDetach。另一半(onAttach…-onResume)没有接到电话。与片段关联的活动正在调用其所有生命周期方法。 任何帮助都将不胜感激,因为我被困在这个问题上。 提前谢谢 这里是活动和静态嵌套类的完整代码,其中是片段: public class MoviesFeed extends Ap

每次旋转屏幕时,我都会经历一种奇怪的碎片生命周期行为。只调用生命周期的前半部分方法,
onPause
onSaveInstanceState
onStop
onDestroyView
onDestroy
onDetach
。另一半(onAttach…-onResume)没有接到电话。与片段关联的活动正在调用其所有生命周期方法。 任何帮助都将不胜感激,因为我被困在这个问题上。 提前谢谢

这里是活动和静态嵌套类的完整代码,其中是片段:

public class MoviesFeed extends AppCompatActivity {
    private static boolean mTwoPane;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("ACT","onCreate");
        setContentView(R.layout.themoviedb_main);
        if(findViewById(R.id.detail_activity_container)!=null) {
            //the detail_activity_container will be present only in large-screen
            //Layouts (res/Layout-sw600dp. If this view is present, then the activity
            //should be in two-pane mode
            mTwoPane=true;
            //In two-pane mode, show the detail view in this activity by adding
            // or replacing the detail fragment using a fragment transaction
            DetailActivityFragment detailActivityFragment=new DetailActivityFragment();
           // Bundle bundle=new Bundle();
           // bundle.putBoolean("twopane",mTwoPane);
           // detailActivityFragment.setArguments(bundle);
            if (savedInstanceState == null) {

                getSupportFragmentManager().beginTransaction()
                        .add(R.id.detail_activity_container, detailActivityFragment)
                        .commit();
            }
        } else {
            mTwoPane=false;

        }
    }

    @Override
    protected void onStart() {
        Log.d("ACT","onStart");
        super.onStart();
    }
    @Override
    protected void onResume() {
        Log.d("ACT","onResume");

        super.onResume();
    }
    @Override
    protected void onPause() {
        Log.d("ACT","onPause");
        super.onPause();
    }

    @Override
    protected void onStop() {
        Log.d("ACT","onStop");
        super.onStop();
    }

    @Override
    protected void onRestart() {
        Log.d("ACT","onRestart");
        super.onRestart();
    }

    @Override
    protected void onDestroy() {
        Log.d("ACT","onDestroy");
        super.onDestroy();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.movies_feed_main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();


        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            startActivity(new Intent(this,SettingsActivity.class));
            return true;
        }


        return super.onOptionsItemSelected(item);
    }


    public static class MoviesFeedFragment extends Fragment implements AdapterView.OnItemClickListener {

        private static final int APPROX_FIXED_IMAGE_WIDTH=170;
        private  GridView mGridView;
        private  MovieAdapter mMovieAdapter;
        private  ArrayList<Response.Movie> mListMovies=new ArrayList<Response.Movie>();
        private  TimeMeasure mTm;
        private  boolean mFromDetailsActivity =false;
        private  boolean mUserRotation=false;
        private  boolean mFavoritesMode=false;

        @Override
        public void onAttach(Activity activity) {
            Log.d("FRAG", "onAttach");
            super.onAttach(activity);
        }

        @Override
        public void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.d("FRAG", "onCreate");
        }

        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View view= inflater.inflate(R.layout.fragment_moviesfeed, container, false);
            Log.d("FRAG", "onCreateView");

            mGridView= (GridView) view.findViewById(R.id.gridView);
            mGridView.setOnItemClickListener(this);
            mMovieAdapter = new MovieAdapter(getActivity(), mListMovies);
            mGridView.setAdapter(mMovieAdapter);
            //for tablets specially
//        float scalefactor = getResources().getDisplayMetrics().density * APPROX_FIXED_IMAGE_WIDTH;
//        Point size=new Point();
//        getWindowManager().getDefaultDisplay().getSize(size);
//        int number=size.x;
//        int columns = (int) ((float) number / (float) scalefactor);
//
//        mGridView.setNumColumns(columns);
            if(savedInstanceState!=null){
                mUserRotation=true;
                ArrayList<Response.Movie> tempList=new ArrayList<Response.Movie>();
                tempList=savedInstanceState.getParcelableArrayList("mListMovies");
                mListMovies.clear();
                mListMovies.addAll(tempList);
                mMovieAdapter = new MovieAdapter(getActivity(), mListMovies);
                mGridView.setAdapter(mMovieAdapter);
            }


            return view;
        }

        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            Log.d("FRAG", "onActivity");
            super.onActivityCreated(savedInstanceState);
        }

        @Override
        public void onPause() {
            Log.d("FRAG", "onPause");
            super.onPause();
        }

        @Override
        public void onStop() {
            Log.d("FRAG", "onStop");
            super.onStop();
        }

        @Override
        public void onSaveInstanceState(Bundle outState) {
            Log.d("FRAG", "onSaveInstanceState");
            super.onSaveInstanceState(outState);
            outState.putParcelableArrayList("mListMovies", mListMovies);
        }


        @Override
        public void onResume() {
            Log.d("FRAG", "onResume");
            super.onResume();
            if (mFromDetailsActivity !=true && mUserRotation!=true) {
                executeCallToMoviesApi();
            } else if(mFromDetailsActivity==true && mFavoritesMode==true) {
                getFavoritesMovies();
            }
            mFromDetailsActivity =false;
            mUserRotation=false;

        }

        @Override
        public void onDestroyView() {
            Log.d("FRAG", "onDestroyView");
            super.onDestroyView();
        }

        @Override
        public void onDestroy() {
            Log.d("FRAG", "onDestroy");
            super.onDestroy();
        }

        @Override
        public void onDetach() {
            Log.d("FRAG", "onDetach");
            super.onDetach();
        }

        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            if (mTwoPane==true) {
                DetailActivityFragment detailActivityFragment=new DetailActivityFragment();
                Bundle args=new Bundle();
                args.putString("movieId", String.valueOf(mListMovies.get(position).getId()));
                //Response.Movie movie=new Response.Movie();
                //movie.setId(mListMovies.get(position).getId());
                //args.putParcelable("movie",movie);
                args.putBoolean("favoritesMode",mFavoritesMode);
                detailActivityFragment.setArguments(args);
                getActivity().getSupportFragmentManager().beginTransaction()
                        .replace(R.id.detail_activity_container,detailActivityFragment)
                        .commit();


            } else {
                Intent intent = new Intent(getActivity(), DetailActivity.class);
                intent.putExtra("favoritesMode", mFavoritesMode);
                intent.putExtra("movieId", mListMovies.get(position).getId());
                mFromDetailsActivity = true;
                startActivity(intent);
            }
        }

        public void executeCallToMoviesApi(){

            SharedPreferences sharedPreferences= PreferenceManager.getDefaultSharedPreferences(getActivity());
            String orderStr= sharedPreferences.getString(getString(R.string.pref_order_key),
                    getString(R.string.pref_order_default));
            mFavoritesMode=false;
            if (orderStr.equals(getString(R.string.pref_popularity))){
                getActivity().setTitle(getString(R.string.mainactivity_title_popularity));
                getMoviesByPopularity();

            }
            if (orderStr.equals(getString(R.string.pref_rate))){
                getActivity().setTitle(getString(R.string.mainactivity_title_rate));
                getMoviesByRate();
            }
            if (orderStr.equals(getString(R.string.pref_favorites))) {
                getActivity().setTitle(getString(R.string.mainactivity_title_favorites));
                mFavoritesMode=true;
                getFavoritesMovies();
            }
        }

        public void getMoviesByPopularity(){

            ApiClient.MyApi myApi=ApiClient.getMyApiClient();
            myApi.getMoviesByPopularityDesc(AppConstants.API_KEY, callbackResponse());


        }
        public void getMoviesByRate(){
            ApiClient.MyApi myApi=ApiClient.getMyApiClient();
            myApi.getMoviesByAverageRate(AppConstants.API_KEY, callbackResponse());


        }

        private Callback<Response> callbackResponse() {

            return new Callback<Response>() {
                @Override
                public void success(Response response, retrofit.client.Response response2) {
                    //    Message.displayToast(MoviesFeed.this, "success");

                    mListMovies.clear();
                    mListMovies.addAll((ArrayList) response.getResults());
                    mMovieAdapter = new MovieAdapter(getActivity(), mListMovies);
                    mGridView.setAdapter(mMovieAdapter);



                }

                @Override
                public void failure(RetrofitError error) {
                    Log.v("VILLANUEVA", "error:" + error.getMessage().toString());
                    Message.displayToast(getActivity(), "failure" + error.getMessage().toString());
                }
            };

        }

        public void getFavoritesMovies(){
            List<MovieDetail> tempListDetail;
            ArrayList<Response.Movie> tempList=new ArrayList<Response.Movie>();
            SharedPreferenceManager sharedPreferenceManager=new SharedPreferenceManager(getActivity());
            tempListDetail = sharedPreferenceManager.getFavoritesList();
            Response.Movie tempMovie;
            if (tempListDetail!=null) {
                for (MovieDetail movieDetail : tempListDetail) {
                    tempMovie = new Response.Movie();
                    tempMovie.setId(movieDetail.getId());
                    tempMovie.setPoster_path(movieDetail.getPoster_path());
                    tempList.add(tempMovie);
                }
                mListMovies.clear();
                mListMovies.addAll(tempList);
            }
            mMovieAdapter = new MovieAdapter(getActivity(), mListMovies);
            mGridView.setAdapter(mMovieAdapter);


        }




    }//MoviesFeedFragment
public class MoviesFeed扩展了appcompative活动{
私有静态布尔值窗格;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(“行为”、“创建”);
setContentView(右布局,移动b_主视图);
if(findViewById(R.id.detail\u activity\u container)!=null){
//详细信息\u活动\u容器将仅在大屏幕中显示
//布局(res/Layout-sw600dp。如果存在此视图,则活动
//应处于双窗格模式
mTwoPane=true;
//在双窗格模式下,通过添加
//或者使用片段事务替换细节片段
DetailActivityFragment DetailActivityFragment=新的DetailActivityFragment();
//Bundle=新Bundle();
//bundle.putBoolean(“twopane”,mTwoPane);
//detailActivityFragment.setArguments(bundle);
如果(savedInstanceState==null){
getSupportFragmentManager().beginTransaction()
.add(R.id.detail\u activity\u容器,detailActivityFragment)
.commit();
}
}否则{
mTwoPane=false;
}
}
@凌驾
受保护的void onStart(){
日志d(“行动”、“启动”);
super.onStart();
}
@凌驾
受保护的void onResume(){
日志d(“行动”、“恢复”);
super.onResume();
}
@凌驾
受保护的void onPause(){
日志d(“行动”、“暂停”);
super.onPause();
}
@凌驾
受保护的void onStop(){
Log.d(“ACT”、“onStop”);
super.onStop();
}
@凌驾
受保护的void onRestart(){
日志d(“行动”、“重新启动”);
super.onRestart();
}
@凌驾
受保护的空onDestroy(){
日志d(“ACT”、“onDestroy”);
super.ondestory();
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.movies\u feed\u main,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
startActivity(新意图(此,setingsActivity.class));
返回true;
}
返回super.onOptionsItemSelected(项目);
}
公共静态类MoviesFeedFragment扩展片段实现AdapterView.OnItemClickListener{
私有静态最终整数约为固定图像宽度=170;
私有网格视图mGridView;
私人电影适配器;
private ArrayList mListMovies=new ArrayList();
私人时间测量mTm;
私有布尔值mFromDetailsActivity=false;
私有布尔mUserRotation=false;
私有布尔值mFavoritesMode=false;
@凌驾
公共事务主任(活动){
日志d(“FRAG”、“onAttach”);
超级转速计(活动);
}
@凌驾
创建时的公共void(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Log.d(“FRAG”、“onCreate”);
}
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.fragment\u moviesfeed,container,false);
Log.d(“FRAG”、“onCreateView”);
mGridView=(GridView)view.findviewbyd(R.id.GridView);
mGridView.setOnItemClickListener(此);
mMovieAdapter=新的电影适配器(getActivity(),mListMovies);
mGridView.setAdapter(mMovieAdapter);
//专门用于药片
//float scalefactor=getResources().getDisplayMetrics().density*近似固定图像宽度;
//点大小=新点();
//getWindowManager().getDefaultDisplay().getSize(大小);
//整数=大小.x;
//int列=(int)((float)number/(float)scalefactor);
//
//mGridView.setNumColumns(列);
如果(savedInstanceState!=null){
mUserRotation=true;
ArrayList tempList=新的ArrayList();
templast=savedInstanceState.getParcelableArrayList(“MLISMovies”);
mListMovies.clear();
mListMovies.addAll(圣殿骑士);
mMovieAdapter=新的电影适配器(getActivity(),mListMovies);
mGridView.setAdapter(mMovieAdapter);
}
返回视图;
}
@凌驾
ActivityCreated上的公共无效(@Nullable Bundle savedinStateCState){
日志d(“FRAG”、“onActivity”);
super.onActivityCreated(savedInstanceState);
}
@凌驾
公共无效暂停(){
日志d(“FRAG”、“onPause”);
super.onPause();