2016-08-30 43 views
0

運行片段onCreateView停止標籤的變化我都用下面的實施三個標籤,他們表現非常好。當標籤被改變的適當的片段是負荷等。問題是,當我得到的最後一個標籤和復出的第一個片段,它像它的oncreateview方法總是再次觸發運行的其他代碼它造成重複。任何幫助將不勝感激。如何在Andriod的

//的標籤上的活動是基於

public class Dashboard extends AppCompatActivity { 

private TabLayout tabLayout; 
private ViewPager viewPager; 
private MyViewPagerAdapter myViewPagerAdapter; 
private int[] tabIcon = {R.drawable.ic_home, R.drawable.ic_message, R.drawable.ic_person}; 
android.support.v7.widget.Toolbar toolbar; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.dashboard); 
    //Toolbar 
    toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    //ViewPager 
    viewPager = (ViewPager) findViewById(R.id.viewpager); 
    setupViewPager(viewPager); 

    //Tablayout 
    tabLayout = (TabLayout) findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.getTabAt(0).setIcon(tabIcon[0]); 
    tabLayout.getTabAt(1).setIcon(tabIcon[1]); 
    tabLayout.getTabAt(2).setIcon(tabIcon[2]); 

    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      switch(tab.getPosition()) { 
       case 0: 
        viewPager.setCurrentItem(0); 
        toolbar.setTitle("Home"); 
        break; 
       case 1: 
        viewPager.setCurrentItem(1); 
        toolbar.setTitle("Messages"); 
        break; 
       case 2: 
        viewPager.setCurrentItem(2); 
        toolbar.setTitle("Profile"); 
        break; 
      } 
     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 


    }); 
} 

private void setupViewPager(ViewPager viewPager){ 
    myViewPagerAdapter = new MyViewPagerAdapter(getSupportFragmentManager()); 
    myViewPagerAdapter.addFragments(new CategoryFragment(), "Categories"); 
    myViewPagerAdapter.addFragments(new MessagesFragment(), "Messages"); 
    myViewPagerAdapter.addFragments(new ProfileFragment(), "Profile"); 
    viewPager.setAdapter(myViewPagerAdapter); 
} 

//View Pager Adapter 
public class MyViewPagerAdapter extends FragmentPagerAdapter { 

    ArrayList<Fragment> fragments = new ArrayList<>(); 
    ArrayList<String> tabTitles = new ArrayList<>(); 

    public void addFragments(Fragment fragments, String titles){ 

     this.fragments.add(fragments); 
     this.tabTitles.add(titles); 
    } 

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

    @Override 
    public int getCount() { 
     return fragments.size(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return fragments.get(position); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     //return tabTitles.get(position); 
     return null; 
    } 
} 



@Override 
public void onBackPressed() { 
    super.onBackPressed(); 
} 

}

//主第一片段代碼 公共類CategoryFragment延伸片段{

private DBHandler dbHandler; 
private ListView listView; 
private ListAdapter adapter; 
ArrayList<Categories> categoriesList = new ArrayList<Categories>(); 

public CategoryFragment() { 
    // Required empty public constructor 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_home, container, false); 

    //Setting up the basic categories 
    dbHandler = new DBHandler(view.getContext()); 

    //Get Categories from database 
    final Cursor cursor = dbHandler.getCategories(0); 
    if (cursor != null) { 
     if(cursor.moveToFirst()){ 
      do{ 
       Categories categories = new Categories(); 
       categories.set_id(cursor.getInt(0)); 
       categories.set_categoryname(cursor.getString(2)); 
       categories.set_categoriescaption(cursor.getString(3)); 
       categoriesList.add(categories); 

      }while (cursor.moveToNext()); 
     } 
     cursor.close(); 
    } 

    listView = (ListView) view.findViewById(R.id.categories); 

    adapter = new CategoryAdapter(view.getContext(), R.layout.cursor_row, categoriesList); 
    listView.setAdapter(adapter); 

    listView.setOnItemClickListener(
      new AdapterView.OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

        Integer cid = (int) (long) adapter.getItemId(position); 

        TextView categoryname = (TextView) view.findViewById(R.id.cursor); 
        String cname = categoryname.getText().toString(); 

        Intent i = new Intent(view.getContext(), CategoryList.class); 
        i.putExtra("categoryname", cname); 
        i.putExtra("categoryid", cid); 
        startActivity(i); 
       } 
      } 
    ); 

    return view; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

}

所以當我從最後一個選項卡刷卡回到這裏。 OncreateView再次運行。我如何處理並防止重複。謝謝

回答

2

通過默認設置,當你刷到第三個標籤ViewPager僅保留1視圖層次頁面空閒state.So的viepager破壞爲了留住第二個第一個標籤。

爲了解決這個問題,加入這一行

viewPager.setOffscreenPageLimit(3); 

您將適配器後。 檢查here更多

+0

感謝文檔,這解決了我的問題,工作出色的... –