2015-11-01 109 views
2

我有一个属于标签视图一部分的片段。当我按下返回按钮时,我想重新启动这个片段。但我不知道如何刷新它。 我尝试了一些这样的代码: Restart fragment inside activity但它没有奏效。当后退按钮按下时重新启动片段类

这里是用于检测后退按钮一个代码:

@Override 
public void onResume() { 

    super.onResume(); 

    getView().setFocusableInTouchMode(true); 
    getView().requestFocus(); 
    getView().setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK){ 

       // handle back button 




       return true; 

      } 

      return false; 
     } 
    }); 
} 

这里是一个片段类按钮:

public class MoviesFragment extends Fragment { 

    static ListView list; 


static String[] numbers_text = new String[] { "one", "two", "three", "four", 
     "five", "six", "seven", "eight", "nine", "ten", "eleven", 
     "twelve", "thirteen", "fourteen", "fifteen" }; 
String[] songs = new String[] { "1", "2", "3", "4", "5", "6", "7", 
     "8", "9", "10", "11", "12", "13", "14", "15" }; 



MainCustomList adapter; 




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



    View view = inflater.inflate(R.layout.fragment_movies, container, false); 

    adapter = new MainCustomList(this.getActivity(), numbers_text); 
     list=(ListView) view.findViewById(R.id.list); 
     list.setAdapter(adapter); 


     return view; 
} 

主:

public class MainActivity extends FragmentActivity implements 
    ActionBar.TabListener { 

private ViewPager viewPager; 
private TabsPagerAdapter mAdapter; 
private ActionBar actionBar; 
// Tab titles 
private String[] tabs = { "Top Rated", "Games", "Movies" }; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Initilization 
    viewPager = (ViewPager) findViewById(R.id.pager); 
    actionBar = getActionBar(); 
    mAdapter = new TabsPagerAdapter(getSupportFragmentManager()); 

    viewPager.setAdapter(mAdapter); 
    actionBar.setHomeButtonEnabled(false); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);   

    // Adding Tabs 
    for (String tab_name : tabs) { 
     actionBar.addTab(actionBar.newTab().setText(tab_name) 
       .setTabListener(this)); 
    } 

    /** 
    * on swiping the viewpager make respective tab selected 
    * */ 
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

     @Override 
     public void onPageSelected(int position) { 
      // on changing the page 
      // make respected tab selected 
      actionBar.setSelectedNavigationItem(position); 
     } 

     @Override 
     public void onPageScrolled(int arg0, float arg1, int arg2) { 
     } 

     @Override 
     public void onPageScrollStateChanged(int arg0) { 
     } 
    }); 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    // on tab selected 
    // show respected fragment view 
    viewPager.setCurrentItem(tab.getPosition()); 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
} 

} 
+0

你的TabLayout中有多少片段,你试图刷新的片段的位置是什么? –

+1

我有三个选项卡,它是第三个。 – user5508330

+0

查看下面的解决方案,看看它是否适合你。 (您是否使用支持库?) –

回答

8

使用此代码:

YourFragmentClass fragment = (YourFragmentClass) 
getFragmentManager().findFragmentById(R.id.your_fragment_container_id) 

getFragmentManager().beginTransaction() 
        .detach(fragment) 
        .attach(fragment) 
        .commit(); 

&这将导致您的fragmentOnCreateView方法被称为再次&刷新其布局。

UPDATE:

当使用Support Library,您可以访问您的片段是这样的:

int YOUR_FRAGMENT_POSITION = 2; // in your case you wanna access the 3rd fragment, 0 indexed 

YourFragmentClass fragment = (YourFragmentClass) getSupportFragmentManager().getFragments().get(YOUR_FRAGMENT_POSITION); 

并使用上述同样的代码片段:

getSupportFragmentManager().beginTransaction() 
         .detach(fragment) 
         .attach(fragment) 
         .commit(); 

如果你尝试要通过PagerAdapter访问您的fragment,您最终可能会收到IllegalStateException,告诉你该片段未能保存其state

+0

感谢它的工作。 – user5508330

+0

不客气。让我告诉你一些我最后一次遇到同样问题的想法。您的更新也可以使用 –

+0

。 – user5508330

相关问题