2016-07-18 4 views
1

MaterialtTabHost 및 ViewPager를 사용하고 있는데 새 탭으로 전환 할 때마다 자동으로 새 데이터로 업데이트해야합니다.탭을 다시 선택하면 조각을 새로 고치는 방법 MaterialTabHost

이것은 내가 보여줄 다른 조각이있는 모든 ViewPager에 대해 탭과 viewPager를 추가 한 것입니다.

public class FrontPage_Activity extends AppCompatActivity implements MaterialTabListener { 
    ViewPager mPager; 
    StorageUtil storageUtil; 
    User user; 
    MaterialTabHost tabHost; 
    Toolbar toolbar; 
    MyPageAdapter myPageAdapter; 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     for (int i = 0; i < myPageAdapter.getCount(); i++) { 
      tabHost.addTab(tabHost.newTab().setText(myPageAdapter.getPageTitle(i)).setTabListener(this)); 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_front_page_); 
     storageUtil = new StorageUtil(this); 
     storageUtil.setUserStatus(1); 
     user = storageUtil.getUser(); 
     toolbar = (Toolbar) findViewById(R.id.app_bar); 
     setSupportActionBar(toolbar); 
     ActionBar actionBar = getSupportActionBar(); 
     if (user != null) 
      actionBar.setTitle("Welcome " + user.getName()); 
     mPager = (ViewPager) findViewById(R.id.pager); 
     tabHost = (MaterialTabHost) findViewById(R.id.materialTabHost); 
     mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       tabHost.setSelectedNavigationItem(position); 
      } 
     }); 
     myPageAdapter = new MyPageAdapter(getSupportFragmentManager()); 
     mPager.setAdapter(myPageAdapter); 
     /*for (int i = 0; i < myPageAdapter.getCount(); i++) { 
      tabHost.addTab(tabHost.newTab().setText(myPageAdapter.getPageTitle(i)).setTabListener(this)); 
     }*/ 
     mPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

      } 

      @Override 
      public void onPageSelected(int position) { 
       if (position == 0) { 
       } else if (position == 1) { 

       } 
      } 

      @Override 
      public void onPageScrollStateChanged(int state) { 

      } 
     }); 

    } 

    @Override 
    public void onTabSelected(MaterialTab tab) { 
     mPager.setCurrentItem(tab.getPosition()); 
    } 

    @Override 
    public void onTabReselected(MaterialTab tab) { 

    } 

    @Override 
    public void onTabUnselected(MaterialTab tab) { 

    } 

    class MyPageAdapter extends FragmentPagerAdapter { 
     String tabs[] = getResources().getStringArray(R.array.tabs); 

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

     @Override 
     public CharSequence getPageTitle(int position) { 
      return tabs[position]; 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return setFragment(position); 
     } 

     @Override 
     public int getCount() { 
      return 3; 
     } 
    } 

    private Fragment setFragment(int number) { 
     if (number == 0) { 
      Chats chats = new Chats(); 
      return chats; 
     } else if (number == 1) { 
      Request frag = new Request(); 
      return frag; 
     } else { 
      Invite frag = new Invite(); 
      return frag; 
     } 

    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.chatting_activity, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.logout: 
       storageUtil.clear(); 
       startActivity(new Intent(this, MainActivity.class)); 
       break; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

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

답변

0

먼저 떨어져,이 조금 힘든, 한 가지 방법이 될 수는 사람들이 서로 다른 결과를 가지고, 아직 테스트에 넣어 몇 가지 방법은 결국이 있습니다.

일반적으로 사용하는 방법 중 하나는 getItemPosition을 재정의하는 것입니다. 당신의 손님 어댑터 (MyPageAdapter)에서

,과 같이 getItemPosition를 오버라이드 (override) :

class MyPageAdapter extends FragmentPagerAdapter { 
... 
    @Override 
     public int getItemPosition(Object object) { 
     if (object instanceof Chats) { 
      ((Chats)object).updateMyLogicOrView(); 
     } 
     if (object instanceof Request) { 
      ((Request)object).updateMyLogicOrView(); 
     } 

    if (object instanceof Invite) { 
      ((Invite)object).updateMyLogicOrView(); 
     } 
     return super.getItemPosition(object); 
     } 
.. 
} 

그런 다음 자신의 탭에 속한 각각의 조각에, 당신은 updateMyLogicOrView()을 만들 수 있습니다. 이 방법에서는 뷰에 새로운 데이터/업데이트 데이터를 생성하기를 원하는 일부 작업을 수행합니다. 탭으로 이동할 때이 updateMyLogicOrView()은 항상 재정의 된 메소드를 통해 호출됩니다.

// put this method on each fragment class 
public void updateMyLogicOrView(){ 
// do some logics here.. 
// like component.setText() 
// or, adding some new elements to adapter.. 

} 
관련 문제