2013-10-25 65 views
0

我正在創建一個應用程序,可以使用日語語言環境當我用英語運行應用程序即默認語言環境它工作正常,沒有任何異議,但是當我改變語言環境並運行相同在getSupportActionBar()點的應用程序崩潰ActionBarSherlock給予空指針異常getSupportActionBar()在國際化

我沒有使用任何的主題和默認的主題是如下

<style name="AppBaseTheme" parent="android:Theme.Light"> 

我的代碼如下:MainActivity.java

public class MainActivity extends SherlockFragmentActivity { 

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

ActionBar actionbar = getSupportActionBar(); 
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
actionbar.setTitle("PROFILE"); 
Tab frag1tab = actionbar.newTab().setText("LOGIN"); 
Tab frag2tab = actionbar.newTab().setText("REGISTER"); 

Fragment fragment1 = new LoginFragment(); 
Fragment fragment2 = new RegistrationFragment(); 

frag1tab.setTabListener(new MyTabListener(fragment1)); 
frag2tab.setTabListener(new MyTabListener(fragment2)); 

actionbar.addTab(frag1tab); 
actionbar.addTab(frag2tab); 

} 

class MyTabListener implements TabListener { 
public Fragment fragment; 

public MyTabListener(Fragment fragment) { 
    this.fragment = fragment; 

} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onTabSelected(Tab arg0, FragmentTransaction ft) { 
    // TODO Auto-generated method stub 
    ft.replace(R.id.fragment_container, fragment); 

} 

@Override 
public void onTabUnselected(Tab arg0, FragmentTransaction arg1) { 
    // TODO Auto-generated method stub 

} 

} 

} 

LoginFragment代碼

public class LoginFragment extends SherlockFragment implements OnClickListener{ 
URLConnection url; 
JSONObject j1; 
View v; 
EditText UserName; 
EditText Password; 
int result; 
Button btn1; 
StringBuffer br; 
Handler h; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    v=inflater.inflate(R.layout.login_fragment, container,false); 
    Log.d("Fragment_1", "MIKEL - onCreateView"); 
    h=new Handler(); 

    UserName=(EditText) v.findViewById(R.id.username); 
    Password=(EditText) v.findViewById(R.id.password); 


    btn1=(Button) v.findViewById(R.id.loginButton); 


    btn1.setOnClickListener(this); 


    // currentContext.startActivity(activityChangeIntent); 


    return v; 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    } 
    } 

與同類其他片段代碼

我的strings.xml價值觀文件夾如下。

<resources> 
<string name="app_name">Internationalization and Localization</string> 
<string name="hello">Hello World.</string> 

<string name="byebye">Bye bye World</string> 
<string name="button">Change Text</string> 
</resources> 

values-ja文件夾中的My Strings.xml如下。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="app_name">國際化と現地化</string> 
<string name="hello">こんにちは、みなさん </string> 
<string name="byebye">さようなら、みなさん</string> 
<string name="button">テキストを変える</string> 
</resources> 

回答

1

您必須更改主題。檢查這裏面明顯

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/Theme.Sherlock" > 
+0

更改主題後,代碼運行正常。謝謝。 – Chaitanya

+0

沒有改變主題如何解決NPE任何想法。? –

0

我設置ActionBarSherlock的方法是:

private void initActionBar() { 
    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
    getSupportActionBar().setCustomView(R.layout.actionbar_main); 
} 

我上面充氣的活動佈局的新佈局。我在調用initActionBar()方法BEFORE super.onCreate(savedInstanceState);

佈局可能看起來像(例如):

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="48dp" 
      android:background="@drawable/bg_actionbar"> 

<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/img_actionbar_logo" 
     android:layout_centerVertical="true" /> 
OR ANYTHING ELSE YOU WANT HERE/BUTTONS/TEXTVIEWS/etc. 

</RelativeLayout> 

而且你需要在你的清單的應用程序的Android打電話:主題= 「@風格/ Theme.Sherlock」>。如果你不想在活動actionBarSherlock那麼你必須手動設置,例如:

<activity 

      android:name="pl.toptof.android.ui.activity.SplashActivity" 
      android:theme="@style/Theme.Styled.NoActionBar" 
</activity> 

,你必須要記住的另一件事是,你不要再使用「活動」和「片段」但SherlockActivity和SherlockFragment或SherlockFragmentActivity。