0

我有一個viewpager與擴展FragmentStatePagerAdapter的適配器,這必須顯示一些片段,總是重複相同的佈局(其中有一個listView)每個頁面...現在的問題是如何通過單擊片段外部的按鈕來更新當前可見的listView?我只能刷新不可見頁面中的那些,但不能顯示那些顯示或相鄰的頁面... 一種可能的解決方案是重置適配器,但它似乎並不正確,因爲它'很慢...你能幫我嗎?通過點擊它的外部刷新列表查看

public class MainActivity extends FragmentActivity implements OnClickListener{ 

    @Override 
    protected void onCreate(Bundle arg0) { 
      // TODO Auto-generated method stub 
      super.onCreate(arg0); 
      setContentView(R.layout.layout1); 
      pagerAdapter = new AdapterPager(getSupportFragmentManager()); 
      ctx=this; 
      mViewPager = (ViewPager) findViewById(R.id.pager); 
      mViewPager.setAdapter(pagerAdapter); 
      pagerTab=(PagerTabStrip) findViewById(R.id.pager_tab_strip); 
      mViewPager.setCurrentItem(paginaCentrale); 
      modifica=(ImageView)findViewById(R.id.modifica); 
     modifica.setOnClickListener(this); 


    } 

    @Override 
    public void onClick(View arg0) { 
      // TODO onClick 
      switch (arg0.getId()){ 
      case R.id.modifica: 

       //here I would like to call the method caricaLista() of the fragment 

      break; 
      } 
    } 


    public static class AdapterPager extends FragmentStatePagerAdapter { 
    public AdapterPager(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
      public int getItemPosition(Object object) { 
        // TODO Auto-generated method stub 

        return super.getItemPosition(object); 
      } 


      @Override 
     public Fragment getItem(int i) { 
      Fragment fragment; 
      Bundle args = new Bundle(); 
      args.putInt("position", i); 
      fragment=new Fragment1(); 
      fragment.setArguments(args); 
    return fragment; 
     } 

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

     @Override 
     public CharSequence getPageTitle(int i) { 
      String title=String.valueOf(i); 

      return title; 
     } 


    } 

public static class Fragment1 extends Fragment implements OnItemClickListener{ 

int fragmentPosition; 
ListView lv; 
     List<Lista> lista= new ArrayList<Lista>(); 

     public Fragment1(){  
      } 
      public static Fragment1 newInstance(){ 
      return new Fragment1(); 
      } 

    @Override 
      public void onResume() { 
        // TODO Auto-generated method stub 
        super.onResume(); 
        caricaLista("")} 
      } 
    @Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle 
savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment1, container, false); 

lv=(ListView) rootView.findViewById(R.id.listViewCompiti); 

      Bundle args = getArguments(); 
      int position= args.getInt("position"); 

      fragmentPosition=position; 
      lv.setOnItemClickListener(this); 
    homeListAdapter= new HomeListAdapterWithCache(ctx,R.layout.list_item_home,lista); 
        lv.setAdapter(homeListAdapter); 



    return rootView; 
} 

回答

0

您必須將Current Fragment存儲到MainActivity中,並且每次頁面更改時都要更改。 所以你調用當前片段的方法。

查看您所在MainActivity應該如何看起來像:

public class MainActivity extends FragmentActivity implements OnClickListener{ 

    &Fragment mCurrentFragment;* 

    protected void onCreate(Bundle arg0) { 
     super.onCreate(arg0); 
     setContentView(R.layout.layout1); 
     pagerAdapter = new AdapterPager(getSupportFragmentManager()); 
     ctx=this; 
     mViewPager = (ViewPager) findViewById(R.id.pager); 
     mViewPager.setAdapter(pagerAdapter); 
     pagerTab=(PagerTabStrip) findViewById(R.id.pager_tab_strip); 
     mViewPager.setCurrentItem(paginaCentrale); 
     modifica=(ImageView)findViewById(R.id.modifica); 
     modifica.setOnClickListener(this); 

     *mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
      mCurrentFragment = pagerAdapter.getItem(position); 
      }* 

    }); 


@Override 
    public void onClick(View arg0) { 
      // TODO onClick 
     switch (arg0.getId()){ 
     case R.id.modifica: 
      *mCurrentFragment.caricaLista();* 
     break; 
     } 
} 

} 
+0

真的很感謝你的回答......但是當我點擊它似乎沒有任何要更新它仍然是相同的:(我可以從看logCat表示該方法已被調用,但爲什麼該片段沒有改變? – marcox1994

+0

該方法做了什麼?它的一個列表?我猜你必須調用適配器內部的notifyDataSetChanged你的函數caricaLista –

+0

該方法本身的作用,實際上listView onStart填充正確...(我打電話給notifyDataSetChanged ...) – marcox1994