【问题标题】:Android - ViewPager setting adapter on a null object referenceAndroid - 在空对象引用上设置 ViewPager 适配器
【发布时间】:2015-05-24 15:29:19
【问题描述】:

这是基本的错误描述(底部有完整描述)

尝试调用虚方法'void android.support.v4.view.ViewPager.setAdapter(android.support.v4.view.PagerAdapter)' 在空对象引用上

在 mViewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));

(删除了抽屉和工具栏相关的代码)

MainActivity.java

//variables
    private ViewPager mViewPager;
    private SlidingTabLayout mSlidingTabLayout;

//onCreate

   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_appbar);

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));

    mSlidingTabLayout = (SlidingTabLayout) findViewById(R.id.tabs);
    mSlidingTabLayout.setViewPager(mViewPager);

}

//PagerAdapter

    public class MyPagerAdapter extends FragmentPagerAdapter {
    String[] tabs;

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
        tabs = getResources().getStringArray(R.array.tabs);
    }

    @Override
    public Fragment getItem(int position) {
        MyFragment myFragment = MyFragment.getInstance(position);
        return myFragment;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return tabs[position];
    }

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

//MyFragment

   public static class MyFragment extends Fragment {
    private TextView textView;

    public static MyFragment getInstance(int position) {
        MyFragment myFragment = new MyFragment();
        Bundle bundleArgs = new Bundle();

        bundleArgs.putInt("position", position);
        myFragment.setArguments(bundleArgs);
        return myFragment;
    }

//OnCreateView

 @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View layout = inflater.inflate(R.layout.fragment_my, container, false);
        textView = (TextView) layout.findViewById(R.id.position);
        Bundle bundleValues = getArguments();
        if(bundleValues!=null){
            textView.setText("The page currently selected is" + bundleValues.getInt("position"));
        }
        return layout;
    }

activity_main.xml

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
    android:id="@+id/LinearLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.company.name.mskv4.MainActivity">

    <include
        android:id="@+id/app_bar"
        layout="@layout/app_bar" />

    <com.piserve.geejo.mskv4.tabs.SlidingTabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </com.piserve.geejo.mskv4.tabs.SlidingTabLayout>

    <com.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
    />

</LinearLayout>

<fragment
    android:id="@+id/fragment_navigation_drawer"
    android:name="com.piserve.geejo.mskv4.NavigationDrawerFragment"
    android:layout_width="@dimen/nav_drawer_width"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:layout="@layout/fragment_navigation_drawer"
    tools:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>

fragmentmy.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/position"
android:layout_width="match_parent" android:layout_height="match_parent"
android:textColor="@color/color_primary_text"
android:textSize="20sp"
android:gravity="center"
android:text="The page number is 1">

</TextView>

strings.xml

<resources>
<string name="app_name">MSK v4</string>
<string name="title_activity_main">MyServiceKart</string>

<string-array name="tabs">
    <item>Search</item>
    <item>All</item>
    <item>Featured</item>
</string-array>
</resources>

更多错误说明

java.lang.RuntimeException:无法启动活动 组件信息{com.company.name.mskv4/com.company.name.mskv4.MainActivity}: java.lang.NullPointerException:尝试调用虚拟方法'void android.support.v4.view.ViewPager.setAdapter (android.support.v4.view.PagerAdapter)' 在空对象引用上

【问题讨论】:

    标签: android android-layout android-gradle-plugin


    【解决方案1】:

    主要活动

    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setAdapter(new MyPagerAdapter(getSupportFragmentManager(), getApplicationContext()));
    

    PagerAdapter

    public MyPagerAdapter(FragmentManager fm, Context context) {
        super(fm);
        tabs = context.getResources().getStringArray(R.array.tabs);
    }
    

    试试吧..

    【讨论】:

    • 这里是项目页面,可以编译查看:bitbucket.org/geejo/mskv4。感谢您的帮助金
    • MainActivity 85, 89line -> context.getResources().~~~ / 另一部分是我好像没有了..
    • 从那时起,我只是对代码进行了一些更改以获取选项卡的图像/标题,但仍然存在相同的错误
    【解决方案2】:

    您正在从activity_main_appbar.xml 文件中设置内容,但您已将寻呼机添加到activity_main.xml 文件中。当我们设置任何 xml 文件的内容时,编译器将查看该特定文件。所以只需使用

    setContentView(R.layout.activity_main);
    

    代替:

    setContentView(R.layout.activity_main_appbar);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多