GVKun编程网logo

导航抽屉标题textview nullpointerexception(ui抽屉式导航)

8

如果您想了解导航抽屉标题textviewnullpointerexception和ui抽屉式导航的知识,那么本篇文章将是您的不二之选。我们将深入剖析导航抽屉标题textviewnullpointere

如果您想了解导航抽屉标题textview nullpointerexceptionui抽屉式导航的知识,那么本篇文章将是您的不二之选。我们将深入剖析导航抽屉标题textview nullpointerexception的各个方面,并为您解答ui抽屉式导航的疑在这篇文章中,我们将为您介绍导航抽屉标题textview nullpointerexception的相关知识,同时也会详细的解释ui抽屉式导航的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

导航抽屉标题textview nullpointerexception(ui抽屉式导航)

导航抽屉标题textview nullpointerexception(ui抽屉式导航)

我有一个2活动和一个服务,首先我有导航抽屉,并且标题中有2个textview,有时我必须更改它们的文本,在服务中我需要一些数据。
第一次运行时一切都很完美,但是当我从第二个转到第一个活动,我在textviews中有nullpointerexception。是什么原因造成的,以及如何解决?

//First@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    //Navigation drawer init    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbarMain);    setSupportActionBar(toolbar);    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);    drawer.addDrawerListener(toggle);    toggle.syncState();    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view_main);    navigationView.setNavigationItemSelectedListener(this);    intent = new Intent("playbackservice");    sConn = new ServiceConnection() {        public void onServiceConnected(ComponentName name, IBinder binder) {            Log.d(LOG_TAG, "MainActivity onServiceConnected");            service = ((PlaybackService.PlaybackServiceBinder) binder).getService();            bound = true;            prepareLayout();        }        public void onServiceDisconnected(ComponentName name) {            Log.d(LOG_TAG, "MainActivity onServiceDisconnected");            bound = false;        }    };}private void prepareLayout() {    Log.d(LOG_TAG, "prepareLayout: Running");    ((TextView) findViewById(R.id.songNameNavhead)).setText(currentSong.getName());    ((TextView) findViewById(R.id.artistNavhead)).setText(currentSong.getArtist());}

//Layout nav_header_main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"          android:layout_width="match_parent"          android:layout_height="@dimen/nav_header_height"          android:gravity="bottom"          android:orientation="vertical"          android:background="@color/colorPrimaryDark"          android:paddingBottom="@dimen/activity_vertical_margin"          android:paddingLeft="@dimen/activity_horizontal_margin"          android:paddingRight="@dimen/activity_horizontal_margin"          android:paddingTop="@dimen/activity_vertical_margin"          android:theme="@style/ThemeOverlay.AppCompat.Dark"><TextView    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:textAppearance="?android:attr/textAppearanceLarge"    android:text="@string/default_song_name"    android:id="@+id/songNameNavhead"/><TextView    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="@string/default_artist"    android:id="@+id/artistNavhead"/></LinearLayout>

//activity_main.xml<?xml version="1.0" encoding="utf-8"?><android.support.v4.widget.DrawerLayout    android:id="@+id/drawer_layout"    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"    android:fitsSystemWindows="true"    tools:openDrawer="start"><include    layout="@layout/app_bar_main"    android:layout_width="match_parent"    android:layout_height="match_parent"/><android.support.design.widget.NavigationView    android:id="@+id/nav_view_main"    android:layout_width="wrap_content"    android:layout_height="match_parent"    android:layout_gravity="start"    android:fitsSystemWindows="true"    app:headerLayout="@layout/nav_header_main"    app:menu="@menu/activity_main_drawer"/></android.support.v4.widget.DrawerLayout>

错误

05-12 19:34:05.001 11086-11086/iskandarovlev.myitschool.ru.lyricplayer E/AndroidRuntime: FATAL EXCEPTION: main                            Process: iskandarovlev.myitschool.ru.lyricplayer, PID: 11086                            java.lang.NullPointerException                            //MainActivity.java:302 is                             //((TextView) header.findViewById(R.id.songNameNavhead)).setText(currentSong.getName());                            //this line                            at iskandarovlev.myitschool.ru.lyricplayer.MainActivity.prepareLayout(MainActivity.java:302)                             at iskandarovlev.myitschool.ru.lyricplayer.MainActivity.access$700(MainActivity.java:48)                            at iskandarovlev.myitschool.ru.lyricplayer.MainActivity$3.onServiceConnected(MainActivity.java:355)                            at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1140)                            at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1157)                            at android.os.Handler.handleCallback(Handler.java:808)                            at android.os.Handler.dispatchMessage(Handler.java:103)                            at android.os.Looper.loop(Looper.java:193)                            at android.app.ActivityThread.main(ActivityThread.java:5542)                            at java.lang.reflect.Method.invokeNative(Native Method)                            at java.lang.reflect.Method.invoke(Method.java:515)                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:657)                            at dalvik.system.NativeStart.main(Native Method)

答案1

小编典典

要在Navigation
Drawer的标题中成功找到任何小部件,您需要首先获取标题视图。这可以通过使用getHeaderView()方法来实现:

View header = ((NavigationView)findViewById(R.id.navigation_view)).getHeaderView(0);

然后,header指向其中ViewGroup包含我们的小部件的右侧,您可以findViewById()照常使用:

TextView tv = header.findViewById(R.id.songNameNavhead);tv.setText(currentSong.getName());

或更紧凑的方式:

((TextView)header.findViewById(R.id.songNameNavhead))                 .setText(currentSong.getName());

android – ArrayAdapter.createViewFromResource(int,View,ViewGroup,int)行:355 NullPointerException

android – ArrayAdapter.createViewFromResource(int,View,ViewGroup,int)行:355 NullPointerException

我设置了一个ArrayAdapter,并且我收到以下错误:
Thread [<1> main] (Suspended (exception NullPointerException)) 
ArrayAdapter.createViewFromresource(int,View,ViewGroup,int) line: 355    
ArrayAdapter.getView(int,ViewGroup) line: 323    
ListView(AbsListView).obtainView(int,boolean[]) line: 1294 
ListView.measureHeightOfChildren(int,int,int) line: 1198

我的symptomremedyActivity.java看起来像:

setContentView(R.layout.symptomremedy);
    ListView remedyList = (ListView) findViewById(R.id.ListView_Symptomremedy);
    remedyList.setTextFilterEnabled(true);
    ArrayAdapter<String> adapt = new ArrayAdapter<String>(this,R.layout.menu_item,remedyArray);
    remedyList.setAdapter(adapt);

我的symptomremedy.xml布局如下所示:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/Button_BACK"
android:layout_width="wrap_content"
android:layout_height="@dimen/menu_button_height"
android:layout_alignTop="@+id/Button_BACK"
android:layout_below="@+id/ImageView_MenuHeader"
android:textSize="@dimen/menu_button_text_size"
android:text="@string/back"></Button>

<ListView
        android:layout_height="wrap_content"
        android:id="@+id/ListView_Symptomremedy"
        android:layout_width="fill_parent"
        android:background="@color/menu_white"
        android:divider="@drawable/straight_divider"
        android:listSelector="@drawable/textured"
        android:layout_alignParentTop="true"></ListView>

</LinearLayout>

和menu_item.xml布局看起来像:

<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:textSize="@dimen/menu_item_size"
android:text="test string"
android:textColor="@color/menu_black"
android:layout_height="fill_parent"
 />

我在其他活动中做过类似的事情没有任何问题,所以我不知道为什么在这里有一个问题.所有涉及的字段都是非空的,即补救数组等.任何人都知道问题是什么?

解决方法

NullPointerException in
ArrayAdapter.createViewFromresource

表明问题来自于

R.layout.menu_item

如果此文件存在于/ res / layout /下,请检查它是否已在R.java中注册

另外,您是否使用自定义的ArrayAdapter?如果是这样,请使用代码更新问题.

如果您不使用自定义的ArrayAdapter,请尝试在menu_item中的TextView中添加标识符.如果您不覆盖getView,Android将尝试使用remedyList中的数据填充resourceId(menu_item.xml)中的TextView.我从来没有这样做,但您可能需要使用此构造函数指定TextView id:

ArrayAdapter(Context context,int resource,int textViewResourceId,List<T> objects)

检查ArrayAdapter构造函数.

android – NullPointerException在TextView.checkForRelayout(),而setText()

android – NullPointerException在TextView.checkForRelayout(),而setText()

我试图实现ViewHolder模式,以便在绘图上绘制地图时提高性能.
我需要为我的标记创建一些标签.在draw()中的数据处理中调用此方法
// Now we create label view and convert it into bitmap
private Bitmap createLabelBitmap(GisLaborHistoryObject object,HistoryPoint point) {
    // create view from xml
    if (vh == null) {
        vh = new ViewHolder();
        vh.view = inflater.inflate(R.layout.map_gis_history_label,null,false);
        vh.tv = (TextView) vh.view.findViewById(R.id.gislabeltext);
    }

    // set label content
    if (vh.tv != null) {
        if (!mSingleLaborHistory) {
            String name = "";
            name = object.getdisplayName();
            if (name == null || "".equals(name))
                name = object.getPersonId();
            if (name == null || "".equals(name))
                name = object.getLaborCode();
            if (name == null)
                name = "";

            vh.tv.setText(name);
        } else
            vh.tv.setText(point.getChangeDate());
    } 
    // measure resulting view
    vh.view.measure(spec,spec);
    vh.view.layout(0,vh.view.getMeasuredWidth(),vh.view.getMeasuredHeight());
    Bitmap b = Bitmap.createBitmap(vh.view.getWidth(),vh.view.getHeight(),Bitmap.Config.ARGB_8888);
    canvasToDraw.setBitmap(b);
    canvasToDraw.translate(-vh.view.getScrollX(),-vh.view.getScrollY());
    vh.view.draw(canvasToDraw);
    return b;
}

规格是

spec = MeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);

结果是
logcat的:

04-29 17:12:34.057: E/AndroidRuntime(389): java.lang.NullPointerException
 04-29 17:12:34.057: E/AndroidRuntime(389):     at android.widget.TextView.checkForRelayout(TextView.java:5497)
 04-29 17:12:34.057: E/AndroidRuntime(389):     at android.widget.TextView.setText(TextView.java:2730)
 04-29 17:12:34.057: E/AndroidRuntime(389):     at android.widget.TextView.setText(TextView.java:2598)
 04-29 17:12:34.057: E/AndroidRuntime(389):     at android.widget.TextView.setText(TextView.java:2573)
 04-29 17:12:34.057: E/AndroidRuntime(389):     at com.xxx.android.proj.ui.map.overlays.LaborsMarkerOverlay.createLabelBitmap(LaborsMarkerOverlay.java:164)

我使用的XML布局

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gislabeltext"android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="2dp"
android:paddingRight="2dp" />

可能是这个错误的原因?

解决方法

在看到android source code在5497行我注意到有一个检查使用mLayoutParams.我在调试模式下看起来就是这样,真的是空的!
我添加明确设置此参数的行.现在一切正常
vh.tv = (TextView) vh.view.findViewById(R.id.gislabeltext);
vh.tv.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

我的错误是,当使用ViewGroup膨胀时,我必须显式设置LayoutParams root = null;一切正常,直到我尝试重用TextView乘法时间.

android – 导航抽屉Viewpager setVisibility = InflateException / NullPointer

android – 导航抽屉Viewpager setVisibility = InflateException / NullPointer

我开发了一个Android应用程序,我遇到了一些问题.

在我的MainActivity中,我有以下组件:

>导航抽屉(实例化并加载许多碎片)
> ViewPager(仅适用于显示文章详细视图的ArticleFragment)

normaly,ViewPager与特定的Activity有关,但我真的想同时使用Navigation Drawer和ViewPager.唯一的方法是在同一个活动中实现这两个元素.

DrawerLayout由导航抽屉本身和内容区域组成.在我的内容区域中,我有一个FrameLayout和ViewPager.问题是始终显示ViewPager.

所以我的想法是使用android:visibility属性来交替显示/隐藏FrameLayout和ViewPager.如果查看我的activity_main.xml,您会发现在ViewPager上将android:visibility设置为不可见.

/layout/activity_main.xml
    

    <!-- The main content view -->
    <RelativeLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <FrameLayout
            android:id="@+id/container"
            android:paddingTop="?android:attr/actionBarSize"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

        <!-- ViewPager -->
        <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="invisible" />

    </RelativeLayout>

    <!-- The navigation drawer -->
    <fragment android:id="@+id/navigation_drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:name="NavigationDrawerFragment" />

</android.support.v4.widget.DrawerLayout>

然后:

MainActivity.java

public class MainActivity extends ActionBaractivity implements NavigationDrawerFragment.NavigationDrawerCallbacks {

    private NavigationDrawerFragment mNavigationDrawerFragment;
    private FrameLayout mContainer;

    private ViewPager mPager;
    private PagerAdapter mPagerAdapter;

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

        // Set up the navigation drawer
        mContainer = (FrameLayout) findViewById(R.id.container);
        mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
        mNavigationDrawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));

        // Set up the viewpager
        mPager = (ViewPager) findViewById(R.id.pager);
        mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mPagerAdapter);
        mPager.setonPagechangelistener(new ViewPager.SimpleOnPagechangelistener() {
            @Override
            public void onPageSelected(int position) {
                invalidateOptionsMenu();
            }
        });
    }

    //-------------------------------//
    //       NAVIGATION DRAWER       //
    //-------------------------------//

    /**
     * Update the main content by replacing fragments
     */
    @Override
    public void onNavigationDrawerItemSelected(int position) {
        Fragment fragment = null;
        Boolean viewPagerArticles = false;

        switch (position) {
            case 0:
                fragment = new HomeFragment();
                break;
            case 1:
                fragment = new FooFragment();
                break;
            case 2:
                viewPagerArticles = true;

                // Hide navigation drawer container and show the viewpager
                mContainer.setVisibility(FrameLayout.GONE);
                mPager.setVisibility(ViewPager.VISIBLE);

                // NullPointerException with new this line. Why?
                // Fragment already instanciate in ScreenSlidePagerAdapter -> getItem() -> ArticleFragment.create()?
                //fragment = new ArticleFragment();
                break;
            default:
                break;
        }

        // Show the view pager and hide navigation drawer container
        // =================
        // THE BUG IS HERE
        // =================
        if (!viewPagerArticles) {
            mContainer.setVisibility(FrameLayout.VISIBLE);
            mPager.setVisibility(ViewPager.GONE);
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getSupportFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.container, fragment)
                    .commit();
        }
    }

    ...

    //-------------------------------//
    //           VIEWPAGER           //
    //-------------------------------//

    private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
        public ScreenSlidePagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            return DayFragment.create(position);
        }

        @Override
        public int getCount() { ... }
    }
    ...
}

NavigationDrawerFragment.java

http://pastebin.com/LwKZnNiB

显示ViewPager内容

在我的HomeFragment上,我有一个带有onClickListener的按钮:

mButton.setonClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        ((MainActivity)getActivity()).onNavigationDrawerItemSelected(2);
    }
});

当我加载MainActivity时,我遇到了以下错误:InflateException和NullPointerException

AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android/com.example.android.ui.MainActivity}: android.view.InflateException: Binary XML file line #34: Error inflating class fragment
            at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2211)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.view.InflateException: Binary XML file line #34: Error inflating class fragment
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
            at android.app.Activity.setContentView(Activity.java:1895)
            at android.support.v7.app.ActionBaractivity.superSetContentView(ActionBaractivity.java:216)
            at android.support.v7.app.ActionBaractivityDelegateICS.setContentView(ActionBaractivityDelegateICS.java:111)
            at android.support.v7.app.ActionBaractivity.setContentView(ActionBaractivity.java:76)
            at com.example.android.ui.MainActivity.onCreate(MainActivity.java:42)
            at android.app.Activity.performCreate(Activity.java:5133)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2175)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at com.example.android.ui.MainActivity.onNavigationDrawerItemSelected(MainActivity.java:117)
            at com.example.android.ui.NavigationDrawerFragment.selectItem(NavigationDrawerFragment.java:202)
            at com.example.android.ui.NavigationDrawerFragment.onCreate(NavigationDrawerFragment.java:80)
            at android.support.v4.app.Fragment.performCreate(Fragment.java:1477)
            at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:893)
            at android.support.v4.app.FragmentManagerImpl.movetoState(FragmentManager.java:1082)
            at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1184)
            at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:291)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
            at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:267)
            at android.app.Activity.setContentView(Activity.java:1895)
            at android.support.v7.app.ActionBaractivity.superSetContentView(ActionBaractivity.java:216)
            at android.support.v7.app.ActionBaractivityDelegateICS.setContentView(ActionBaractivityDelegateICS.java:111)
            at android.support.v7.app.ActionBaractivity.setContentView(ActionBaractivity.java:76)
            at com.example.android.ui.MainActivity.onCreate(MainActivity.java:42)
            at android.app.Activity.performCreate(Activity.java:5133)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2175)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
            at android.app.ActivityThread.access$600(ActivityThread.java:141)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:5103)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:525)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
            at dalvik.system.NativeStart.main(Native Method)

一切都很好(没有错误,活动加载)没有:

    // =================
    // THE BUG IS HERE
    // =================
    if (!viewPagerArticles) {
        mContainer.setVisibility(FrameLayout.VISIBLE);
        mPager.setVisibility(ViewPager.GONE);
    }

…但它不符合我的期望,因为导航抽屉片段总是隐藏(由于mContainer.setVisibility(FrameLayout.GONE),它是正常的.)我只想反转mContainer / mPager可见性.

我希望我足够清楚……!

任何的想法?

解决方法:

您得到NullPointerException,因为您构建NavigationDrawerFragment片段的方式.更准确地说,在onCreate()方法中,您调用selectItem(),它通过Activity(注册为侦听器)传播到onNavigationDrawerItemSelected()回调.问题是片段在调用setContentView()时会膨胀(在onCreate()中),这意味着你将在行之前输入onNavigationDrawerItemSelected()回调:

mContainer = (FrameLayout) findViewById(R.id.container);
mPager = (ViewPager) findViewById(R.id.pager);

运行,在onNavigationDrawerItemSelected()中呈现这些引用为null.

要解决此问题,您只需替换当前的< fragment />即可.使用基本容器(例如占位符为空的FrameLayout)从Activity布局标记,并在上面的行(绑定视图的位置)之后在onCreate()中手动添加NavigationDrawerFragment.可能有另一种更好的解决方案(或者我可以提出其他建议)但是你不清楚如何处理可见性.也许你可以扩展这个.

编辑2:

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

    // Set up the navigation drawer
    mContainer = (FrameLayout) findViewById(R.id.container);


    // Set up the viewpager
    mPager = (ViewPager) findViewById(R.id.pager);
    mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
    mPager.setAdapter(mPagerAdapter);
    mPager.setonPagechangelistener(new ViewPager.SimpleOnPagechangelistener() {
        @Override
        public void onPageSelected(int position) {
            invalidateOptionsMenu();
        }
    });
    if (savedInstanceState == null) {
        NavigationDrawerFragment ndf = new NavigationDrawerFragment();
        ndf.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout));
        getSupportFragmentManager().beginTransaction().add(R.id.nav_drawer, ndf).commit();
    }
}

编辑1:

//...
<!-- ViewPager -->
        <android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="invisible" />

    </RelativeLayout>
    <!-- The navigation drawer -->
    <FrameLayout android:id="@+id/nav_drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
     />

</android.support.v4.widget.DrawerLayout>

最后在onCreate()中:

//...
mPager.setAdapter(mPagerAdapter);
        mPager.setonPagechangelistener(new ViewPager.SimpleOnPagechangelistener() {
            @Override
            public void onPageSelected(int position) {
                invalidateOptionsMenu();
            }
        });
getSupportFragmentManager().beginTransaction().add(R.id.nav_drawer, new NavigationDrawerFragment()).commit();

如果您使用上面的代码获得异常,那么它是否在onNavigationDrawerItemSelected()方法中?

android – 来自Parcel.readException的NullPointerException(等)

android – 来自Parcel.readException的NullPointerException(等)

看起来像这样的例外令人困惑:
FATAL EXCEPTION: main
java.lang.NullPointerException
    at android.os.Parcel.readException(Parcel.java:1437)
    at android.os.Parcel.readException(Parcel.java:1385)
    at com.yourpackage.ipc.IYourClass$Stub$Proxy.yourMethod(IYourClass.java:488)
    at com.yourpackage.ipc.YourClassShim.yourMethod(YourClassShim.java:269)

我找到了一堆相关的问题,但没有一个回答“你如何调试这个”.所以我正在提出这个问题/答案.

通过查看android源码here和here,你会发现它可以抛出任何这些(NullPointerException就是我所拥有的):

SecurityException(msg);
BadParcelableException(msg);
IllegalArgumentException(msg);
NullPointerException(msg);
IllegalStateException(msg);
RuntimeException("UnkNown exception code: " + code + " msg " + msg);

但究竟是什么导致了这些?

解决方法

这里发生的是readException()正在检查IPC字节流中是否有一个标题,表明发生了异常;如果它找到一个,那么它会抛出该类型的新异常,并使用相同的消息,但是缺少原始堆栈跟踪. (它实际上只知道一些异常类型;其他任何东西都被转换为基本的RuntimeException.)

那么最初的例外来自哪里?好吧,在YourClass.yourMethod()的实际实现的某个地方 – 不在任何parcelable或IPC代码中.所以去那里,将整个方法包装在try / catch中,并记录你抓到的任何内容.

(或者如果你有远程进程断点工作,那么在那里设置一个断点.)

关于导航抽屉标题textview nullpointerexceptionui抽屉式导航的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于android – ArrayAdapter.createViewFromResource(int,View,ViewGroup,int)行:355 NullPointerException、android – NullPointerException在TextView.checkForRelayout(),而setText()、android – 导航抽屉Viewpager setVisibility = InflateException / NullPointer、android – 来自Parcel.readException的NullPointerException(等)等相关知识的信息别忘了在本站进行查找喔。

本文标签: