0

То, что яДоступ ListView адаптер внутри ViewPager

1) У меня есть активность, внутри которой У меня есть ActionBar и фрагмент. 2) Внутри этого фрагмента у меня есть ViewPager, показывающий 3-4 фрагмента. 3) Внутри каждого фрагмента есть другой ListView.

Что я Хочу

Я хочу осуществить ListView фильтр в ActionBar. Это не проблема, но я не могу получить доступ к отдельным адаптерам из разных списков внутри ViewPager, который находится внутри фрагмента.

@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_file_hide_main, menu); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 

    Fragment filesMain = getSupportFragmentManager().findFragmentByTag("FILES_MAIN"); 
    ViewPager viewPager = (ViewPager) filesMain.getView().findViewById(R.id.filesViewPager); 
    if(viewPager.getAdapter() == null) 
     Log.d("TAG", ADAPTER IS NULL"); 


    SearchView.OnQueryTextListener textChangeListener = new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextChange(String newText) { 
      // this is your adapter that will be filtered 
      //adapter.getFilter().filter(newText); 
      return true; 
     } 

     @Override 
     public boolean onQueryTextSubmit(String query) { 
      // this is your adapter that will be filtered 
      //adapter.getFilter().filter(query); 
      return true; 
     } 
    }; 
    searchView.setOnQueryTextListener(textChangeListener); 

    return true; 
} 

Адаптер всегда пустой, и я также смог адаптеры всех ListViews как пойло пользователей.

Помогите с решением.

+0

У вас нет ссылки на пейджер адаптера зрения с момента, когда вы установите его на начальном этапе? –

+0

ViewPager находится внутри фрагмента, но onCreateOptionsMenu находится внутри действия. –

ответ

0

Определить интерфейс:

public interface ViewPagerPageChangeListener{ 
    public void updateFragmentPosition(int position); 
} 

MainActivity:

public class MyActivity extends FragmentActivity implements ViewPagerPageChangeListener(){ 

    @Override 
    public void updateFragmentPosition(int position){ 
     switch(position){ 
      case 0 : 
      FragmentOne fragmentOne = (FragmentOne) mainFragment.getActiveFragment(currentPosition); 
      break; 
      case 1 : 
      FragmentTwo = fragmentTwo = (FragmentTwo) mainFragment.getActiveFragment(currentPosition); 
      break; 
     } 
    } 

} 

Внутри фрагмента, который содержит ViewPager:

ViewPagerPageChangeListener listener = (ViewPagerPageChangeListener)getActivity(); 

mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 
     @Override 
     public void onPageSelected(int pos) { 
      currentPosition = pos; 
      listener.updateFragmentPosition(pos); 
     } 

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

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

public Fragment getActiveFragment(){ 
    return fragmentPagerAdapter.getItem(position); 
} 

Теперь FragmentOne, FragmentTwo и т.д. являются фрагменты внутри вашего просмотр пейджера. Определите метод внутри этого фрагмента, который обновит значения в своих соответствующих списках.

Теперь, когда текущий элемент изменяется внутри пейджера представления, ваше основное действие получает уведомление. Затем вы можете захватить фрагмент из viewpager и обновить текущий видимый фрагмент и передать его соответствующему классу фрагментов.

Теперь, когда вы делаете поиск, просто позвоните fragmentOne.updateList(String filterText); or fragmentTwo.updateList(String filterText);

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