2

私は FragmentPagerAdapter を使用しており、タイトル情報 (「ニュース、情報、ヘルプ、メンバーシップ」-以下のコードを参照) をさまざまな言語で設定したいと考えています。問題は、res/values/strings.xml からタイトルを読み取るにはどうすればよいかということです。

誰かが私を助けることができますか?

ありがとう

トム

public class MainInfoViewPagerAdapter extends FragmentPagerAdapter implements    PageIndicator
{
private String[] titles= new String[]
        {          
        "News",          
        "Information",         
        "Help",
        "Membership"
        };   
public MainInfoViewPagerAdapter( FragmentManager fm) 
{
    super(fm);
}          
4

3 に答える 3

3

これが私がそれを解決した方法です:

アダプターで:

public class TitleAdapter extends FragmentPagerAdapter {
    private String titles[];
    private Fragment frags[];

    public TitleAdapter(FragmentManager fm, Context context) {
                super(fm);

                Resources resources = context.getResources();
                titles = resources.getStringArray(R.array.titles);

                frags = new Fragment[titles.length]; 

                frags[0] = new NewsFragment();
                frags[1] = new ArtistsFragment();
                frags[2] = new InfoFragment();
                frags[3] = new EatDrinkFragment();

         ....

/values/arrays.xml 次のようになります。

<string-array name="titles">
        <item>NEWS</item>
        <item>ARTISTS</item>
        <item>INFORMATION</item>
        <item>EAT AND DRiNK</item>
    </string-array>

言語が必要な場合は、たとえばフランス語の /values-fr/strings.xml のような別の値フォルダーを追加するだけです。

于 2012-10-13T22:32:08.240 に答える
0

プライベートSparseArray<String> TITLES;を作成して管理し、メインのアクティビティの OnCreate 関数に入力します。次のようになります。

   TITLES = new SparseArray<String>();
    TITLES.put(KEY_FRAGMENT,
            getResources().getString(R.string.subtitle_keys));
    TITLES.put(CERTIFICATE_FRAGMENT,
            getResources().getString(R.string.subtitle_cert));
    TITLES.put(TRUST_NETWORK_FRAGMENT,
            getResources().getString(R.string.subtitle_trust_network));
    TITLES.put(CRL_FRAGMENT, getResources()
            .getString(R.string.subtitle_crl));
    TITLES.put(SECURE_FRAGMENT,
            getResources().getString(R.string.subtitle_secure));
    TITLES.put(SETTINGS_FRAGMENT,
            getResources().getString(R.string.subtitle_settings));

最後に、次のようなことFragmentPagerAdapterを行います。getTitle

  @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
        case 0:
            // Fragment of the app is the Key Management.
            return TITLES.get(position);
        case 1:
            // Fragment of the app is the Certificate Management.
            return TITLES.get(position);

        case 2:
            // Fragment of the app is the Trust Network Management.
            return TITLES.get(position);

        case 3:
            // Fragment of the app is the CRL Management.
            return TITLES.get(position);

        default:
            return TITLES.get(position);
        }
    }

最善の方法ではないかもしれませんが、方法です。

于 2012-08-24T19:48:54.790 に答える
0

テストできる他のアプローチはこれです。このテストでは、タブを使用してアクティビティを作成しました。ユーザーがタブを選択するたびに、アクション バーのサブタイトルがさまざまな言語 (英語/スペイン語) に変更されます。したがって、あなたのアクティビティ構造は次のようになっていると思います。

MainActivity extends FragmentActivity
- In this class you have one ViewPager and one PagerAdapter as attributes
- PagerAdapter is a inner class inside MainActivity.

コードは次のようなものです。最初の主なアクティビティ:

 public class TrustNetworkActivity extends FragmentActivity implements
        ActionBar.TabListener {
AppSectionsPagerAdapter mAppSectionsPagerAdapter;
private SparseArray<String> TITLES;
ViewPager mViewPager;
/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        DataBaseDictionary.PACKAGE_NAME = getApplicationContext()
                .getPackageName();
        //Loads the data base
        initDBLoader(this);
        fillSubtitlesArray();
        // Create the adapter that will return a fragment for each of the three
        // primary sections
        // of the app.
        mAppSectionsPagerAdapter = new AppSectionsPagerAdapter(
                getSupportFragmentManager());

        // Set up the action bar.
        final ActionBar ab = getSupportActionBar();
        // ab.setDisplayHomeAsUpEnabled(Boolean.TRUE);
        ab.setSubtitle(TITLES.get(KEY_FRAGMENT));
        ab.setDisplayShowTitleEnabled(true);

        // Set up the ViewPager, attaching the adapter and setting up a listener
        // for when the user swipes between sections.
        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mAppSectionsPagerAdapter);
        mViewPager
                .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                    @Override
                    public void onPageSelected(int position) {
                        // When swiping between different app sections, select
                        // the corresponding tab.
                        // We can also use ActionBar.Tab#select() to do this if
                        // we have a reference to the
                        // Tab.
                        ab.setSubtitle(TITLES.get(position));
                        ab.setSelectedNavigationItem(position);
                    }
                });

        ab.addTab(ab.newTab().setText("").setIcon(R.drawable.ic_menu_keys)
                .setTabListener(this));
        ab.addTab(ab.newTab().setText("").setIcon(R.drawable.ic_menu_cert)
                .setTabListener(this));
        ab.addTab(ab.newTab().setText("")
                .setIcon(R.drawable.ic_menu_trust_network).setTabListener(this));
        ab.addTab(ab.newTab().setText("").setIcon(R.drawable.ic_menu_crl)
                .setTabListener(this));
ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}

/**
     * Fills the subtitle array with the resource strings, so it would be
     * multilanguage
     */
    private void fillSubtitlesArray() {
        TITLES = new SparseArray<String>();
        TITLES.put(0,
                getResources().getString(R.string.subtitle_keys));
        TITLES.put(1,
                getResources().getString(R.string.subtitle_cert));
        TITLES.put(2,
                getResources().getString(R.string.subtitle_trust_network));
        TITLES.put(3, getResources()
                .getString(R.string.subtitle_crl));
        TITLES.put(4,
                getResources().getString(R.string.subtitle_secure));
        TITLES.put(5,
                getResources().getString(R.string.subtitle_settings));

    }

OnPageChangeListenerViewPager でわかるように、アクション バー メソッドを呼び出したのでsetSubtitle、ユーザーが新しいページを選択するたびに、アクション バーのサブタイトルが変更され、次にアダプター:

   /**
 * A {@link FragmentPagerAdapter} that returns a fragment corresponding to
 * one of the primary sections of the app.
 */
public class AppSectionsPagerAdapter extends FragmentStatePagerAdapter {

    public AppSectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int i) {
        switch (i) {
        case 0:
            // Fragment of the app
            return new Fragment1();
        case 1:
            // Fragment of the app
            return new Fragment2();

        case 2:
            // Fragment of the app
            return new Fragment3();

        case 3:
            // Fragment of the app
            return new Fragment4();

        default:
            return new Fragment5();
        }
    }

    @Override
    public int getCount() {
        return 4;
    }
}

これがお役に立てば幸いです。

于 2012-09-04T04:24:23.253 に答える