2015-11-01 2 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(); 

& это заставит ваш fragment «ы OnCreateView метода называться снова & обновить его макет.

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(); 

Если вы пытаетесь для доступа к вашему fragment через PagerAdapter, вы можете получить IllegalStateException, сообщая вам, что фрагмент не смог сохранить его state.

+0

спасибо, что это работает. – user5508330

+0

Добро пожаловать. Позвольте мне показать вам кое-что, что я выяснил в последний раз, когда я перешел к той же проблеме. –

+0

ваше обновление также работает. – user5508330

Смежные вопросы