ActionBarSherlock在国际化上给出空指针异常getSupportActionBar()

时间:2013-10-25 13:44:15

标签: android internationalization 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 Code

   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
    }
  }

其他片段的类似代码

值文件夹中的My 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>

值-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>

2 个答案:

答案 0 :(得分:1)

你必须改变主题。检查清单中的内容

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

答案 1 :(得分: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 =&#34; @ style / Theme.Sherlock&#34;&gt;。如果您不想在活动中使用actionBarSherlock,则必须手动设置它,例如:

<activity

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

和你必须记住的其他事情是你不再使用&#34;活动&#34;和&#34;片段&#34;但是SherlockActivity和SherlockFragment或SherlockFragmentActivity。