在我的应用程序中,我正在使用neokree的materialtabs库。 我希望我的应用程序支持多种语言,所以我希望Tab标题支持翻译。但是,我不能让它工作! ViewPagerAdapter.java有这个方法“Charsequence getPageTitle(int position)” 所以我做了一个开关(位置)。 但现在,例如:
case 0:
return R.string.title1;
不起作用,因为R.string.title1返回int。但我不能使用getString或getResources,因为它是一个帮助类。 我不能使用上下文,因为它是“类不能扩展多个类”。 任何解决方案?
这是我的代码:
ViewPagerAdapter.java:
package jdev.voicerecorder;
import android.app.Activity;
import android.app.Application;
import android.bluetooth.BluetoothClass;
import android.content.Context;
import android.os.Build;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.util.Log;
import java.util.Locale;
class ViewPagerAdapter extends FragmentStatePagerAdapter{
public Context c;
public ViewPagerAdapter(FragmentManager fm){
super(fm);
}
public Fragment getItem(int num){
Log.d("tag", "num " + num);
switch (num){
case 0:
return new Record();
case 1:
return new ShowList();
}
return null;
}
@Override
public int getCount(){
return 2;
}
@Override
public CharSequence getPageTitle(int position){
switch (position){
case 0:
return R.string.title1;
case 1:
return R.string.title2;
}
return null;
}
}
My Mainactivity.java(我称之为RecordingActivity.java):
package jdev.voicerecorder;
import android.os.Environment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import java.io.File;
import it.neokree.materialtabs.MaterialTab;
import it.neokree.materialtabs.MaterialTabHost;
import it.neokree.materialtabs.MaterialTabListener;
public class RecordingActivity extends ActionBarActivity implements MaterialTabListener{
private Toolbar toolbar;
MaterialTabHost tabHost;
ViewPager pager;
ViewPagerAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recording);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
File folder=new File(Environment.getExternalStorageDirectory()
+File.separator
+"/Recordings");
boolean success=true;
if (!folder.exists()){
success=folder.mkdir();
}
if (success){
}else {
}
tabHost = (MaterialTabHost) this.findViewById(R.id.tabHost);
pager = (ViewPager) this.findViewById(R.id.pager);
pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
pager.setAdapter(pagerAdapter);
pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
tabHost.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < pagerAdapter.getCount(); i++) {
tabHost.addTab(
tabHost.newTab()
.setText(pagerAdapter.getPageTitle(i))
.setTabListener(this)
);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_recording, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
return super.onOptionsItemSelected(item);
}
@Override
public void onTabSelected(MaterialTab materialTab) {
pager.setCurrentItem(materialTab.getPosition());
}
@Override
public void onTabReselected(MaterialTab materialTab) {
}
@Override
public void onTabUnselected(MaterialTab materialTab) {
}
}
和strings.xml:
<resources>
<string name="app_name">Recorder</string>
<string name="hello_world">Hello world!</string>
<string name="action_settings">Settings</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="recordTab">Record</string>
<string name="recordsTab">All records</string>
<string name="allrecordsTab">ALL RECORDS</string>
<string name="editexttitle">Filename</string>
<string name="savingpath">"Recording saved</string>
<string name="exText">Recording</string>
<string name="buttonSave">Save</string>
<string name="buttonRecord">Record</string>
<string name="Recording">Recording</string>
<string name="deleted">File removed</string>
<string name="title1">Record</string>
<string name="title2">All Files</string>
<string name="bla">Bla</string>
</resources>
错误日志是
Error:(51, 32) error: incompatible types
required: CharSequence
found: int
答案 0 :(得分:0)
使用getResources()。getString(...)
而不是ID例如:
return getResources().getString(R.string.title1);
答案 1 :(得分:0)
在你的&#34; ViewPagerAdapter.java中试试这个:&#34;:
class ViewPagerAdapter extends FragmentStatePagerAdapter{
public Context c;
public ViewPagerAdapter(FragmentManager fm, Context context){
super(fm);
c = context; /////
}
public Fragment getItem(int num){
Log.d("tag", "num " + num);
switch (num){
case 0:
return new Record();
case 1:
return new ShowList();
}
return null;
}
@Override
public int getCount(){
return 2;
}
@Override
public CharSequence getPageTitle(int position){
String settitle1 = c.getResources().getString(R.string.title1);
String settitle2 = c.getResources().getString(R.string.title2);
String tabtitles[] = new String[] { settitle1, settitle2 };
return tabtitles[position];
}
}
并在您的RecordingActivity中替换为:
pagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
通过
pagerAdapter.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(),getApplicationContext()));