0

我想從FragmentPageAdapter的TextView上改變顏色。當我打電話onHomeScreen或onSettings/onFriends屏幕時,我收到一個NullPointerException。這是解決textviews錯誤的方法嗎?它們在mainmenu.xml中被刪除,並且在onCreate方法中更改顏色/文本時不會發生異常。onPageSelected上的ViewPager和碎片異常。

我的MainMenu.java類。

package com.nordoid.*; 
import android.graphics.Color; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.OnPageChangeListener; 
import android.widget.TextView; 

public class MainMenu extends FragmentActivity implements OnPageChangeListener { 
private MyAdapter mAdapter; 
private ViewPager mPager; 

// MainMenu bar 
TextView home; 
TextView settings; 
TextView friends; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.mainmenu); 
    mAdapter = new MyAdapter(getSupportFragmentManager()); 

    mPager = (ViewPager) findViewById(R.id.mainmenu_pager); 
    mPager.setAdapter(mAdapter); 
    mPager.setOnPageChangeListener(this); 
    mPager.setCurrentItem(1); 

    home = (TextView) findViewById(R.id.mmenu_home); 
    settings = (TextView) findViewById(R.id.mmenu_settings); 
    friends = (TextView) findViewById(R.id.mmenu_friends); 

    // init starting position color. 
    //home.setTextColor(Color.WHITE); 

    home.setText("HOME"); 
    settings.setText("SETTINGS"); 
    friends.setText("FRIENDS") 

} 
public static class MyAdapter extends FragmentPagerAdapter { 
    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 
    @Override 
    public int getCount() { 
     return 3; 
    } 

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
     case 0: 
      return new Mfragment_settings(); 
     case 1: 
      return new Mfragment_main(); 
     case 2: 
      return new Mfragment_friends(); 
     default: 
      return null; 
     } 
    } 
} 

public void onPageScrollStateChanged(int arg0) { 

} 

public void onPageScrolled(int arg0, float arg1, int arg2) { 

} 

public void onPageSelected(int arg0) { 

     switch (arg0) { 
     case 0: 
      onSettingsScreen(); 
      break; 
     case 1: 
      onHomeScreen(); 
      break;  
     case 2: 
      onFriendsScreen(); 
      break; 
     } 
} 

public void onHomeScreen() { 
    home.setTextColor(Color.WHITE); 
    System.out.println("2"); 
    friends.setTextColor(Color.GRAY); 
    settings.setTextColor(Color.GRAY); 
} 

public void onSettingsScreen() { 
    settings.setTextColor(Color.WHITE); 

    friends.setTextColor(Color.GRAY); 
    home.setTextColor(Color.GRAY); 
    System.out.println("PAGE 1"); 
} 

public void onFriendsScreen() { 
    friends.setTextColor(Color.WHITE); 
    System.out.println("3"); 
    home.setText(Color.GRAY); 
    settings.setTextColor(Color.GRAY); 
    } 
    } 

而且我mainmenu.xml文件..

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:background="@drawable/mfrag_home" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/mainmenu_pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<LinearLayout 
    android:id="@+id/linearLayout1" 
    android:layout_width="wrap_content" 
    android:layout_height="27dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_marginTop="45dp" > 

    <TextView 
     android:id="@+id/mmenu_settings" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="15dp" 
     android:paddingTop="2dp" 
     android:text="TextView" 
     android:textColor="@color/White" /> 

    <TextView 
     android:id="@+id/mmenu_home" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="45dp" 
     android:paddingTop="2dp" 
     android:text="TextView" 
     android:textColor="@color/White" /> 

    <TextView 
     android:id="@+id/mmenu_friends" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:paddingLeft="49dp" 
     android:paddingTop="2dp" 
     android:text="TextView" 
     android:textColor="@color/White" /> 

    </LinearLayout> 

,最後我logcat的錯誤。

06-19 00:52:51.346: E/AndroidRuntime(21457): FATAL EXCEPTION: main 
    06-19 00:52:51.346: E/AndroidRuntime(21457): java.lang.RuntimeException: Unable to     start activity ComponentInfo{com.nordoid.tracephone/com.nordoid.tracephone.MainMenu}: java.lang.NullPointerException 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2071) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2096) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.app.ActivityThread.access$600(ActivityThread.java:138) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1207) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.os.Handler.dispatchMessage(Handler.java:99) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.os.Looper.loop(Looper.java:213) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.app.ActivityThread.main(ActivityThread.java:4788) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at java.lang.reflect.Method.invokeNative(Native Method) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at java.lang.reflect.Method.invoke(Method.java:511) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at dalvik.system.NativeStart.main(Native Method) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): Caused by: java.lang.NullPointerException 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at com.nordoid.tracephone.MainMenu.onHomeScreen(MainMenu.java:116) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at com.nordoid.tracephone.MainMenu.onPageSelected(MainMenu.java:103) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:541) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:507) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:488) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at com.nordoid.tracephone.MainMenu.onCreate(MainMenu.java:41) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.app.Activity.performCreate(Activity.java:5008) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2035) 
    06-19 00:52:51.346: E/AndroidRuntime(21457): ... 11 more 

回答

1

我認爲你有一個例外,因爲當mPager.setCurrentItem(1)被調用時,TextView的海內外朋友&設置是空的(初始化發生之後)。

移動:

home = (TextView) findViewById(R.id.mmenu_home); 
settings = (TextView) findViewById(R.id.mmenu_settings); 
friends = (TextView) findViewById(R.id.mmenu_friends); 

前:

mPager = (ViewPager) findViewById(R.id.mainmenu_pager); 

應該解決您的NullPointerException