2016-04-26 69 views
0

我試圖刷新我的片段,以便我可以爲用戶獲取新信息。基本上我是做一個應用程序來參加錦標賽。我在我的應用上有3個標籤,第一個標籤允許用戶添加第二個標籤,允許用戶創建比賽,最後一個標籤向用戶顯示分數。我如何使新的片段onTabSelected刷新我的內容?

enter image description here

但我有一個問題,當我從第一個選項卡中刪除一個用戶,我去我的第二個選項卡我的內容doesn't更新,我真的希望它更新,我因子評分有關創建一個新的片段,當它被選中或嘗試刷新它時,它被選中,但我是新的android和我不知道該怎麼做。

任何意識?

這裏是我的MainActivity代碼:

public class MainActivity extends AppCompatActivity{ 
    // Declaring Your View and Variables 
    Toolbar toolbar; 
    ViewPager viewPager; 
    ViewPagerAdapter adapter; 
    TabLayout tabLayout; 
    CharSequence Titles[]={"Participantes","Torneio","Classificação"}; 
    int Numboftabs =3; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     toolbar = (Toolbar) findViewById(R.id.tool_bar); 
     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     tabLayout = (TabLayout)findViewById(R.id.tabLayout); 


     // Creating The Toolbar and setting it as the Toolbar for the activity 
     setSupportActionBar(toolbar); 
     // Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs. 
     adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs); 
     // Assigning ViewPager View and setting the adapter 
     viewPager.setAdapter(adapter); 


     tabLayout.setupWithViewPager(viewPager); 
     tabLayout.setSelectedTabIndicatorColor(getResources().getColor(R.color.colorTextIcons)); 
     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       //should i refresh my tab here? 
       // how do i do that ? 
      } 


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

      } 

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

      } 
     }); 
    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu, 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) { 
      return true; 
     } 
     if (id == R.id.action_info) { 
      Toast.makeText(getApplicationContext(), "Contacto: [email protected]", Toast.LENGTH_LONG).show(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 


} 

這裏是我的ViewPageAdapter代碼:

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 

    CharSequence Titles[]; // This will Store the Titles of the Tabs which are Going to be passed when ViewPagerAdapter is created 
    int NumbOfTabs; // Store the number of tabs, this will also be passed when the ViewPagerAdapter is created 


    // Build a Constructor and assign the passed Values to appropriate values in the class 
    public ViewPagerAdapter(FragmentManager fm,CharSequence mTitles[], int mNumbOfTabsumb) { 
     super(fm); 

     this.Titles = mTitles; 
     this.NumbOfTabs = mNumbOfTabsumb; 

    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     super.destroyItem(container, position, object); 
     FragmentManager manager = ((Fragment) object).getFragmentManager(); 
     FragmentTransaction trans = manager.beginTransaction(); 
     trans.remove((Fragment) object); 
     trans.commit(); 
    } 


    //This method return the fragment for the every position in the View Pager 
    @Override 
    public Fragment getItem(int position) { 

     switch(position) {// if the position is 0 we are returning the First tab 
      case 0: 
      Tab1 tab1 = new Tab1(); 
      return tab1; 
      case 1: 
      Tab2 tab2 = new Tab2(); 
      return tab2; 
      case 2: 
      Tab3 tab3 = new Tab3(); 
      return tab3; 
      default: 
       return null; 
     } 


    } 

    // This method return the titles for the Tabs in the Tab Strip 

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

    // This method return the Number of tabs for the tabs Strip 

    @Override 
    public int getCount() { 
     return NumbOfTabs; 
    } 
} 
+0

我已經嘗試使用onResume()並沒有解決 –

+0

您是否希望每次切換標籤頁時都要刷新適配器? –

+0

請看這裏:http://stackoverflow.com/questions/18088076/update-fragment-from-viewpager ...問題已經在這裏回答。 – Sin

回答

1

我面對同樣的問題,基於答案和一些測試。

我有三分之一的替代(quite similar to the second method):

,而是調用notifyDataSetChanged(),(這引起了我的TabLayout奇怪的行爲),創建ViewPager.OnPageChangeListener類型的偵聽器,並直接調用片段更新方法。看到代碼:

public interface Updateable { 
    public void update(); 
} 


public class MyFragment extends Fragment implements Updateable { 

    ... 

    public void update() { 
    // do your stuff on fragment became visible 
    } 
} 

在活動主持人:

mAdapter = new DashboardPagerAdapter(DashboardActivity.this, 
     getSupportFragmentManager(), mTabs); 
mAdapter.configure(mViewPager); 
mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){ 
    @Override 
    public void onPageSelected(int position) { 
     if (mAdapter != null) { 
      Updateable fragment = (Updateable)mAdapter.getItem(position); 
      if (fragment != null) { 
       fragment. update(); 
      } 
     } 
    } 
}); 

在這樣的片段不重新創建,只是運行的更新方法。對我來說是足夠的。