2016-02-03 29 views
0

我有一个片段的MainActivity。我在页面中有一个ListView,它是MainActivity的片段。现在,当设备方向改变的ListView没有显示之前,显示的任何项目:当android设备方向改变时删除了listview itmes

MainFragment.java:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_main, container, 
        false); 

    if (myGrp == null) 
       myGrp = new ArrayList<List<String>>(); 

    mActivityAdapter = new MyGroupsAdapter(myContext, myGrp); 

    mSectionsPagerAdapter = new SectionsPagerAdapter(
        myContext.getSupportFragmentManager()); 
      mViewPager = (ViewPager) rootView.findViewById(R.id.pager); 
      mViewPager.setAdapter(mSectionsPagerAdapter); 

    mViewPager.setCurrentItem(1); 
    } 

    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

      public SectionsPagerAdapter(FragmentManager fm) { 
       super(fm); 
      } 

      @Override 
      public Fragment getItem(int position) { 
       Fragment fragment = new DummySectionFragment(); 
       Bundle args = new Bundle(); 
       args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1); 
       fragment.setArguments(args); 
       return fragment; 
      } 

      @Override 
      public int getCount() { 
       // Show 3 total pages. 
       return 3; 
      } 

      @Override 
      public CharSequence getPageTitle(int position) { 
       Locale l = Locale.getDefault(); 
       switch (position) { 
       case 0: 
        return getString(R.string.title_section3).toUpperCase(l); 
       case 1: 
        return getString(R.string.title_section2).toUpperCase(l); 
       case 2: 
        return getString(R.string.title_section1).toUpperCase(l); 
       } 
       return null; 
      } 
     } 

    public View onCreateView(LayoutInflater inflater, 
        final ViewGroup container, Bundle savedInstanceState) { 
       View dummyView = null; 
       if (getArguments().getInt(ARG_SECTION_NUMBER) == 1) { 
        dummyView = inflater.inflate(R.layout.inbox_fragment, 
          container, false); 
        ListView mListView = (ListView) dummyView 
          .findViewById(R.id.inbox_listview); 
        mListView.setAdapter(inboxAdapter); 
        mListView 
          .setOnItemLongClickListener(new OnItemLongClickListener() { 

           @Override 
           public boolean onItemLongClick(AdapterView<?> arg0, 
             View arg1, int position, long id) { 
            MainFragment fragment = new MainFragment(); 
            fragment.inboxItem_onLongClick(id); 
            return false; 
           } 
          }); 
       } else if (getArguments().getInt(ARG_SECTION_NUMBER) == 2) { 
        dummyView = inflater.inflate(R.layout.chat_fragment, container, 
          false); 
        ListView mListView = (ListView) dummyView 
          .findViewById(R.id.chatGroupList); 
        mListView.setAdapter(mActivityAdapter); 
       } else if (getArguments().getInt(ARG_SECTION_NUMBER) == 3) { 
          //any things 
         } 
    } 
} 



@Override 
    public void onResume() { 
     super.onResume(); 
     SharedPreferences prfs = myContext.getSharedPreferences("user_info", 
       Context.MODE_PRIVATE); 
     GroupsSaved = prfs.getBoolean("GroupsSaved", false); 

     if (myGrp == null || myGrp.size() == 0) 
      getMyGroups(); 

     Global.nowChatGrpID = 0; 
     mActivityAdapter.notifyDataSetChanged(); 
    } 
+1

您的活动的邮政编码。 – thedarkpassenger

回答

0

也许当你改变方向的活动被重新加载,尝试添加到您的清单:

 <activity android:name=".yourActivity" 
     android:configChanges="keyboardHidden|orientation|screenSize" 
... 

解决问题了吗?

+0

谢谢法比奥,解决:) – saman

0

替换此代码:

myContext.getSupportFragmentManager(); 

getChildFragmentManager(); 

可能会工作。

如果您想要有一个片段作为片段容器,您必须使用该片段的getChildFragmentManager方法。如果您使用getSupportFragmentManager,您基本上会使用片段管理器,它的行为与活动生命周期的行为方式不同,而不是片段的行为方式。

例如我有一个包含ViewPager的片段 - 它被称为CollectionsFragment。所以我有3个片段显示为标签:AllCollectionsFragment,MyCollectionsFragment,FavouriteCollectionsFragment。我把getActivity().getSupportFragmentManager()给了我正在使用的FragmentStatePagerAdapter。

因此,这导致了以下行为 - 3个选项卡片段的onDestroyView/onDestroy/onDetach/onStop方法不被调用。当我更改为使用getChildFragmentManager时,一切正常。

如果你愿意,你可以查看文档的两种方法:

getChildFragmentManager():

返回私人FragmentManager用于放置和管理片段此片段内。

getSupportFragmentManager():

返回的FragmentManager为与该片段的活性相关的片段进行交互。

+0

我非常怀疑这会改变什么。 – thedarkpassenger

+0

你能为你的答案提出一些理由吗? – thedarkpassenger

+0

我没有适当的理由,但我面对一些白屏问题,同时改变屏幕的方向,同时使用片段,当时我已经找到了这个解决方案,这对我有效。而且我还在我的问题中写道“这可能会起作用”。 –

0

为确保您的Activity在每次方向更改时都不会重新加载,您应该在清单中声明android:configChanges="keyboardHidden|orientation|screenSize"。这确保了'活动'的状态被保留并且在方向改变之后不被重新加载。

相关问题