简体   繁体   English

ViewPager 为空

[英]ViewPager is null

I created a ViewPager however I keep getting an error saying that it is null.我创建了一个 ViewPager,但是我一直收到一个错误,说它为空。 I have tried changing the ViewPager, checked the R Id, the ID specified in the XML.我尝试更改 ViewPager,检查 R Id,即 XML 中指定的 ID。 I am suspicious that it is to do with the way in which I have structured the XML file.我怀疑这与我构建 XML 文件的方式有关。 Thanks.谢谢。

This is the error I am getting:这是我得到的错误:

    E/in.mycampuscha: [qarth_debug:]  get PatchStore::createDisableExceptionQarthFile method fail.
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.devin.mycampuschat, PID: 2034
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.devin.mycampuschat/com.devin.MyCampusChat.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.viewpager.widget.ViewPager.setAdapter(androidx.viewpager.widget.PagerAdapter)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3430)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199)
        at android.os.Handler.dispatchMessage(Handler.java:112)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7625)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)


     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void androidx.viewpager.widget.ViewPager.setAdapter(androidx.viewpager.widget.PagerAdapter)' on a null object reference
        at com.devin.MyCampusChat.MainActivity.onCreate(MainActivity.java:63)
        at android.app.Activity.performCreate(Activity.java:7458)
        at android.app.Activity.performCreate(Activity.java:7448)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1286)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3409)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3614) 
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) 
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2199) 
        at android.os.Handler.dispatchMessage(Handler.java:112) 
        at android.os.Looper.loop(Looper.java:216) 
        at android.app.ActivityThread.main(ActivityThread.java:7625) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:987)

This is the XML:这是 XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
    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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
        
        <com.google.android.material.appbar.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >

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

                <com.google.android.material.tabs.TabLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:id="@+id/tab_layout">

                        <com.google.android.material.tabs.TabItem
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:icon="@drawable/ic_chats"
                                android:text="Chats" />

                        <com.google.android.material.tabs.TabItem
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:icon="@drawable/ic_friends"
                            android:text="Friends" />

                        <com.google.android.material.tabs.TabItem
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:icon="@drawable/ic_requests"
                            android:text="Requests" />

                </com.google.android.material.tabs.TabLayout>

        </com.google.android.material.appbar.AppBarLayout>

        <androidx.viewpager.widget.ViewPager
            android:layout_below="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toEndOf="@+id/toolbar"
            app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
        </androidx.viewpager.widget.ViewPager>


</androidx.coordinatorlayout.widget.CoordinatorLayout>

This is the Activity:这是活动:

package com.devin.MyCampusChat;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.app.DownloadManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

import com.devin.MyCampusChat.Fragments.ChatsFragment;
import com.devin.MyCampusChat.Fragments.FriendsFragment;
import com.devin.MyCampusChat.Fragments.RequestsFragment;
import com.google.android.material.tabs.TabLayout;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private FirebaseAuth fAuth;
    private FirebaseUser fUser;
    private Toolbar mToolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    //Fragments.
    private ChatsFragment chatsFragment;
    private FriendsFragment friendsFragment;
    private RequestsFragment requestsFragment;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tabLayout  = findViewById(R.id.tab_layout);
        viewPager  = findViewById(R.id.view_pager);
        fAuth      = FirebaseAuth.getInstance();
        mToolbar   = findViewById(R.id.toolbar);

        //fragments
        chatsFragment    = new ChatsFragment();
        friendsFragment  = new FriendsFragment();
        requestsFragment = new RequestsFragment();

        setSupportActionBar(mToolbar);
        getSupportActionBar().setTitle("MyCampus Chats");

        tabLayout.setupWithViewPager(viewPager);

        ViewPagerAdapter viewPagerAdapter = new MainActivity.ViewPagerAdapter(getSupportFragmentManager(), 0);
        viewPager.setAdapter(viewPagerAdapter);
        viewPagerAdapter.addFragment(chatsFragment, "Chats");
        viewPagerAdapter.addFragment(friendsFragment, "Friends");
        viewPagerAdapter.addFragment(requestsFragment, "Requests");
    }

    @Override
    public void onStart() {
        super.onStart();
        fUser = fAuth.getCurrentUser();

        //Check to see if the current user is null or not, if so, they are not logged in.
        if(fUser == null){
            Intent startIntent = new Intent(MainActivity.this, StartActivity.class);
            startActivity(startIntent);
            finish();
        }
    }

    /** Creates the options menu **/
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        getMenuInflater().inflate(R.menu.main_menu, menu);
        return true;
    }

    /** Gets the options selected from the menu resource **/
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
         super.onOptionsItemSelected(item);

            switch(item.getItemId()) {
                case R.id.log_out_btn:
                    fAuth.signOut();
                    sendToStart();

                    break;
                case R.id.all_users_btn:
                case R.id.settings_btn:
            }

         return true;
    }

    /** Simply sends the user to the startActivity (state not logged in) **/
    private void sendToStart(){
        Intent intent = new Intent(MainActivity.this, StartActivity.class);
        startActivity(intent);
        finish();
    }

    public class ViewPagerAdapter extends FragmentPagerAdapter {

        private List<Fragment> mFragments = new ArrayList<>();
        private List<String>   fragmentTitles = new ArrayList<>();


        public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
            super(fm, behavior);
        }

        public void addFragment(Fragment fragment, String title){
            mFragments.add(fragment);
            fragmentTitles.add(title);
        }

        @NonNull
        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }

        @Override
        public int getCount() {
            return mFragments.size();
        }

        @Nullable
        @Override
        public CharSequence getPageTitle(int position) {
            return fragmentTitles.get(position);
        }
    }
}

No issue in your code.您的代码没有问题。 There is a problem with layout xml.布局xml有问题。

It appears to the id of ViewPager was not provided.似乎没有提供 ViewPager 的 id。

You set id into wrong attribute android:layout_below您将 id 设置为错误的属性android:layout_below

It must be set into android:id它必须设置为android:id

 <androidx.viewpager.widget.ViewPager
            android:id="@+id/view_pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_toEndOf="@+id/toolbar"
            app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
 </androidx.viewpager.widget.ViewPager>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM