ビューページャーのタイトルを設定しようとしていますが、機能しません。 Resources.getSystem()。getString(R.string.title1);を試しました。また、コンテキストを渡そうとしました。誰か助けてもらえますか?
public class ViewPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 3;
Context context;
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public Fragment getItem(int position) {
return PageFragment.create(position + 1);
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return Resources.getSystem().getString(R.string.title1);
case 1:
return Resources.getSystem().getString(R.string.title1);
case 2:
return Resources.getSystem().getString(R.string.title1);
}
return null;
}
}
Logcat:
09-02 17:40:33.160: E/AndroidRuntime(3116): FATAL EXCEPTION: main
09-02 17:40:33.160: E/AndroidRuntime(3116): Android.content.res.Resources$NotFoundException: String resource ID #0x7f050003
09-02 17:40:33.160: E/AndroidRuntime(3116): at Android.content.res.Resources.getText(Resources.Java:230)
09-02 17:40:33.160: E/AndroidRuntime(3116): at Android.content.res.Resources.getString(Resources.Java:314)
まあ、あなたのエラーメッセージによるとIDの文字列がありません要求しています。
多言語をサポートしていて、特定の言語に対してのみこの種の文字列IDがあるのでしょうか?
とにかく、次のコード行:
String yourstring = getResources().getString(R.string.yourstring);
リソースから文字列を取得する方法です。
アクティビティのコンテキストからgetStringを呼び出し、コードを次のように変更する必要があります
public class ViewPagerAdapter extends FragmentPagerAdapter {
final int PAGE_COUNT = 3;
Context context;
public ViewPagerAdapter(FragmentManager fm, Context nContext) {
super(fm);
context = nContext;
}
@Override
public int getCount() {
return PAGE_COUNT;
}
@Override
public Fragment getItem(int position) {
return PageFragment.create(position + 1);
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return context.getString(R.string.title1);
case 1:
return context.getString(R.string.title1);
case 2:
return context.getString(R.string.title1);
}
return null;
}
}
アクティビティの外部から文字列リソースにアクセスしようとしている場合は、そのクラスにコンテキストを渡し(既に行ったと述べた)、次に呼び出す必要があります。
String str = context.getResources().getString(R.string.some_string);
また、strings.xml
ファイルを使用して、文字列IDを正しく使用していることを確認します。 Android studioを使用している場合は、単にR.string.
とすると、strings.xmlファイルからの提案が表示されます。ここにリソースが表示されない場合は、リソースへのアクセス方法ではなく、リソースの保存方法に問題がある可能性があります。
次のものを使用して、使用可能なものを使用してください:getContext().getString(resId)
like:
getContext().getString(R.string.title1)
それは私のために働いた。
試してください:
getApplicationContext().getResources().getString(R.String.title1);
ViewPagerアダプターでgetResources()の呼び出しが許可されていない場合は、親アクティビティで静的変数として宣言する必要があります
Kotlinでは、次のようにコンテキストをアダプターに送信することでこれを行います。
class FmAdapter(val context: Context, fm: FragmentManager) : FragmentStatePagerAdapter(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
private val fragments = arrayListOf<Fragments>()
init {
fragments.add(Fragments(R.string.title1, FragmentOne()))
fragments.add(Fragments(R.string.title2, FragmentTwo()))
}
override fun getCount(): Int = fragments.size
override fun getItem(position: Int): Fragment = fragments[position].fragment
override fun getPageTitle(position: Int): CharSequence? = context.getString(fragments[position].title)
}
データクラス:
data class Fragments(@StringRes val title: Int, val fragment: Fragment)
そして、次のようなアクティビティからの単純な呼び出し:
rv.adapter = FmAdapter(this, supportFragmentManager)
私の経験では、ビューページャーは割り当てられた画面に各テキストを一貫して表示しません。ページごとに個別のレイアウトを作成し、レイアウト内からテキストを割り当てる必要があったので、ページをめくると、各ページにテキストのあるレイアウトが表示されます。
String
を取得せずにResources
内でResources
をフェッチしようとしています。 Resources
をContext
でgetResources()
でプルしてみてください。
あなたがActivity
またはService
の中にいる場合、コンテキストはそこにあります。外部の場合は、最初にContext
をgetApplicationContext()
でプルし、その上でリソースをプルして、最後にString
をプルします。
あなたのコードによると、これらのスニペットは、resources
および言及されたString
IDが適切にプルされている場合、例外をスローしません。
public CharSequence getPageTitle(int position)
{
switch (position)
{
case 0:
return getResources().getString(R.string.title1);
case 1:
return getResources().getString(R.string.title1);
case 2:
return getResources().getString(R.string.title1);
}
return null;
}