public class MainActivity extends FragmentActivity implements FragmentEvent.OnEventListener { ViewPager viewPager;
     MyFragmentPagerAdapter adapter; MainTab01 tab01 = new MainTab01();
MainTab02 tab02 = new MainTab02();
MainTab03 tab03 = new MainTab03();
MainTab04 tab04 = new MainTab04();
MainTab05 tab05 = new MainTab05();
Fragment[] fragments = { tab01, tab02, tab03, tab04 };
boolean[] fragmentsUpdateFlag = { false, false, false, false }; private LinearLayout tabBtnWeixin;
private LinearLayout tabBtnFrd;
private LinearLayout tabBtnAddress;
private LinearLayout tabBtnSettings;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager) findViewById(R.id.id_viewpager); tabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);
tabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);
tabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);
tabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);         adapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); viewPager.setAdapter(adapter); viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { private int currentIndex; @Override
public void onPageSelected(int position) {
resetTabBtn();
switch (position) {
case 0:
((ImageButton) tabBtnWeixin
.findViewById(R.id.btn_tab_bottom_weixin))
.setImageResource(R.drawable.tab_weixin_pressed);
break;
case 1:
((ImageButton) tabBtnFrd
.findViewById(R.id.btn_tab_bottom_friend))
.setImageResource(R.drawable.tab_find_frd_pressed);
break;
case 2:
((ImageButton) tabBtnAddress
.findViewById(R.id.btn_tab_bottom_contact))
.setImageResource(R.drawable.tab_address_pressed);
break;
case 3:
((ImageButton) tabBtnSettings
.findViewById(R.id.btn_tab_bottom_setting))
.setImageResource(R.drawable.tab_settings_pressed);
break;
} currentIndex = position;
} @Override
public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override
public void onPageScrollStateChanged(int arg0) {
}
}); }    Handler mainHandler = new Handler() {        //////////////接口回调,转数字为函数//////////////////////////////////////////////
        @Override
        public void handleMessage(Message msg) {            super.handleMessage(msg);
            switch (msg.what) {
                case MSG.INTO_05:
                    fragments[3] = tab05;
                    fragmentsUpdateFlag[3] = true;
                    adapter.notifyDataSetChanged();
                    break;
                default:
            }
        }
    };

解决方案 »

  1.   

    有一个问题:为什么adapter在类中定义,oncreat中初始化,为什么还能在Handler 类中使用啊
      

  2.   

    因为handleMessage方法在oncreat之后,所以肯定能用。handler是延时被调用,而onCreat是立即被调用所以一定会被new出来
      

  3.   

    你的adapter变量相对于这个Java文件来说是全局变量啊。如果把MyFragmentPagerAdapter adapter= new MyFragmentPagerAdapter(getSupportFragmentManager());这行代码写在oncreat中,再删除你的MyFragmentPagerAdapter adapter;这行代码。此时你的adapter变量就只是属于oncreat方法的局部变量,那么你的Handler就无法使用adapter变量了