【问题标题】:refresh listView by clicking outside of it通过单击外部刷新 listView
【发布时间】:2013-07-18 07:30:03
【问题描述】:

我有一个带有扩展 FragmentStatePagerAdapter 的适配器的 viewpager,这必须显示一些片段,每个页面总是重复相同的布局(其中有一个 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;
}

【问题讨论】:

    标签: android-listview android-viewpager fragmentstatepageradapter


    【解决方案1】:

    您必须将 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;
            }
    }
    
    }
    

    【讨论】:

    • 真的很感谢您的回答...但是当我单击它时似乎没有任何更新它保持不变:(我可以从 logCat 中看到该方法已被调用,但为什么片段没有变化?
    • 这个方法是做什么的?它的清单?我想你必须在你的 funcion caricaLista 的适配器内部调用 notifyDataSetChanged
    • 该方法本身有效,实际上 listView onStart 已正确填充...(我调用 notifyDataSetChanged...)
    • @marcox1994 使用 caricaLista() 的代码编辑您的帖子,以便我能够提供帮助
    • @marcox1994 你可以好心,把你的解决方案发布给我们关闭这个话题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-29
    • 2014-12-30
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2016-03-12
    • 2018-07-05
    相关资源
    最近更新 更多