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