ViewPager findViewById错误NullPointerException

在Fragment工程中,详细探讨了initViewPager方法在onActivityCreated阶段而非onCreateView阶段调用时遇到的NullPointerException问题,并提供了针对性解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

advPager = (ViewPager) getView().findViewById(R.id.adv_pager);
08-07 12:51:16.041: E/AndroidRuntime(29103): Caused by: java.lang.NullPointerException



Fragment工程中,initViewPager在onActivityCreated初始调用,而不是onCreateView。



请优化以下android代码:main.java :package com.example.myapplication.Fragment; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import androidx.viewpager.widget.ViewPager; import com.example.myapplication.R; import com.example.myapplication.Viewpagerhd.Mypageradapter; import java.util.ArrayList; import java.util.List; public class Fragment_main extends AppCompatActivity implements View.OnClickListener { private Fragment fragment1, fragment2, fragment3; private TextView tab1, tab2, tab3; private ViewPager myViewpager; private List<Fragment> fragmentList; private Mypageradapter mypageradapter; private Fragment currentFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment1); initUI(); // initFragments(); initTab(); } private void initTab() { fragmentList = new ArrayList<Fragment>(); fragmentList.add(new Fragmenta_1()); fragmentList.add(new Fragmenta_2()); fragmentList.add(new Fragmenta_3()); // 使用修正后的适配器 mypageradapter = new Mypageradapter(getSupportFragmentManager(), fragmentList); myViewpager.setAdapter(mypageradapter); myViewpager.addOnPageChangeListener(new MyPageChangeListennr()); // 修正监听器设置 showFragment(0); } private void showFragment(int i) { myViewpager.setCurrentItem(i); if (i == 0){ tab1.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); }else if (i==1){ tab2.setBackgroundColor(Color.RED); tab1.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); }else if (i==2){ tab3.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab1.setBackgroundColor(Color.WHITE); } } public class MyPageChangeListennr implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if (position==0){ tab1.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); }else if (position==1){ tab2.setBackgroundColor(Color.RED); tab1.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); }else if (position==2){ tab3.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab1.setBackgroundColor(Color.WHITE); } } @Override public void onPageScrollStateChanged(int state) { } } private void initUI() { tab1 = findViewById(R.id.T1); tab2 = findViewById(R.id.T2); tab3 = findViewById(R.id.T3); tab1.setOnClickListener(this); tab2.setOnClickListener(this); tab3.setOnClickListener(this); myViewpager =(ViewPager) findViewById(R.id.myviewpage); // updateTabColors(R.id.T1); } // private void initFragments() { // FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // // // 按顺序添加所有Fragment // fragment1 = new Fragmenta_1(); // fragment2 = new Fragmenta_2(); // fragment3 = new Fragmenta_3(); // // transaction.add(R.id.view_pager, fragment1, "1"); // transaction.add(R.id.view_pager, fragment2, "2"); // transaction.add(R.id.view_pager, fragment3, "3"); // // transaction.hide(fragment2); // transaction.hide(fragment3); // transaction.commitNow(); // 立即提交事务 // // currentFragment = fragment1; // } @Override public void onClick(View v) { if (v.getId()==R.id.T1) { showFragment(0); }else if (v.getId()==R.id.T2){ showFragment(1); }else if (v.getId()==R.id.T3){ showFragment(2); } } private void switchFragment(Fragment targetFragment, int tabId) { if (targetFragment == currentFragment) return; FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); transaction.hide(currentFragment); transaction.show(targetFragment); transaction.commitNow(); // 使用立即提交 currentFragment = targetFragment; updateTabColors(tabId); } private void updateTabColors(int selectedTabId) { int defaultColor = Color.WHITE; int selectedColor = Color.RED; tab1.setBackgroundColor(selectedTabId == R.id.T1 ? selectedColor : defaultColor); tab2.setBackgroundColor(selectedTabId == R.id.T2 ? selectedColor : defaultColor); tab3.setBackgroundColor(selectedTabId == R.id.T3 ? selectedColor : defaultColor); } } 适配器:package com.example.myapplication.Fragment; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import java.util.List; public class Mypageradapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; public Mypageradapter(FragmentManager fm) { super(fm); } public Mypageradapter(FragmentManager fm, List<Fragment>fragmentList) { super(fm); this.fragmentList=fragmentList; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } } 运行日志:2025-05-29 13:58:01.366 22820-22820/? E/e.myapplicatio: Unknown bits set in runtime_flags: 0x8000 2025-05-29 13:58:02.024 22820-22820/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 22820 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.Fragment.Fragment_main}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference at com.example.myapplication.Viewpagerhd.Mypageradapter.getCount(Mypageradapter.java:40) at androidx.viewpager.widget.ViewPager.setAdapter(ViewPager.java:532) at com.example.myapplication.Fragment.Fragment_main.initTab(Fragment_main.java:46) at com.example.myapplication.Fragment.Fragment_main.onCreate(Fragment_main.java:35) at android.app.Activity.performCreate(Activity.java:7802) at android.app.Activity.performCreate(Activity.java:7791) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:214)  at android.app.ActivityThread.main(ActivityThread.java:7356)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)  运行时,代码没有报错,但是应用打不开,只是闪一下就退出
最新发布
05-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值