2016-02-05 58 views
-3

我想從xml訪問字符串名稱到這個字符串數組中,但它給了我空對象錯誤,我該怎麼辦?我怎樣才能訪問這個字符串?我已經使用上下文,但它不工作,有人可以告訴我,我該怎麼做?想要訪問XML中的一個片段中的字符串

public class ViewProfileAdapter extends FragmentPagerAdapter { 
    final int PAGE_COUNT = 4; 
    Context context; 
    String a=context.getApplicationContext().getResources().getString(R.string.viewkundli_tab_kundli); 
    String b=context.getApplicationContext().getResources().getString(R.string.viewkundli_tab_remedies); 
    String c=context.getApplicationContext().getResources().getString(R.string.viewkundli_tab_predictions); 
    String d=context.getApplicationContext().getResources().getString(R.string.viewkundli_tab_panchang); 

    private String tabTitles[] = new String[] {a,b,c,d }; 

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

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

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return ViewKundli_1.newInstance(position); 

      case 1: 
       return ViewKundli_2.newInstance(position); 

      case 2: 
       return ViewKundli_3.newInstance(position); 

      case 3: 
       return ViewKundli_4.newInstance(position); 

     } 
     return null; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     // Generate title based on item position 
     return tabTitles[position]; 

    } 

} 
+0

你沒有初始化你的上下文變量。只要使用getApplicationContext()。getResources().... – X3Btel

+0

@bipin你可以接受幫助答案咆哮任何其他人從你的貢獻獲得幫助:) – MilapTank

回答

5

使用getActivity()而不是context.getApplicationContext().的片段。 併爲您的適配器,您應該使用一個構造函數來初始化上下文變量,然後獨自context將工作

+0

它是一個片段不活動,所以我怎麼能使用getActivity()?它給了我錯誤 – bipin

0

getString(R.string.viewkundli_tab_kundli)直接作用在片段的情況下

+0

String a = getString(R.string.view_kundli_menu);不工作 – bipin

+0

你會得到一些錯誤..你能分享你的錯誤日誌 – Nitesh

1

ViewProfileAdapter類創建構造函數,並通過上下文構造函數現在使用StringArray而不是string

ViewProfileAdapter.java

private Context context; 
private String[] tabTitleArray = null; 

public ViewProfileAdapter(FragmentManager fm, 
     Context context) { 
    super(fm); 
    tabTitleArray = context.getResources().getStringArray(
      R.array.tab_title); 
    this.context= context; 
} 

@Override 
public int getCount() { 
    return tabTitleArray.length(); 
} 

在你FragmentActivity

ViewProfileAdapter pageAdapter 
          = new ViewProfileAdapter(getFragmentManager(), this); 
//this- Activity and getActivty() for Fragment 

string.xml

<string-array name="tab_titles"> 
    <item>tab1</item> 
    <item>tab2</item> 
    <item>tab3</item> 
    <item>tab4</item> 
</string-array> 
+0

其工作現在謝謝大家! – bipin

0

你需要一個構造函數添加到類:

public ViewProfileAdapter(Context context) { 
    this.context = context; 
} 

而在你的活動:

ViewProfileAdapter adapter = new ViewProfileAdapter(this); 
//etc... 

那麼你是好去使用:

context.getResources().getString(R.string.viewkundli_tab_kundli); 
//etc... 
0

上下文成員未初始化。 您需要將上下文傳遞給適配器,然後將其用作參考。 在這種情況下,您不能在字段聲明中初始化字符串。

Context context; 
String a; 
String b; 
String c; 
String d; 

private String[] tabTitles; 

public ViewProfileAdapter(Context context, FragmentManager fm) { 
    super(fm); 
    this.context = context; 
    a=context.getString(R.string.viewkundli_tab_kundli); 
    b=context.getString(R.string.viewkundli_tab_remedies); 
    c=context.getString(R.string.viewkundli_tab_predictions); 
    d=context.getString(R.string.viewkundli_tab_panchang); 
    tabTitles = new String[] {a,b,c,d }; 
} 

// If you need String elsewhere 

void method() { 
    String s = context.getString(R.string.s); 
} 

甚至更​​好

private final String[] tabTitles; 

public ViewProfileAdapter(Context context, FragmentManager fm) { 
    super(fm); 
    tabTitles = context.getResources().getStringArray(R.array.tab_titles); 
} 

的strings.xml

<string-array name="tab_titles"> 
    <item>a</item> 
    <item>b</item> 
    <item>c</item> 
    <item>d</item> 
</string-array> 
0

我已經修改我的回答適合你的需求。

public class ViewProfileAdapter extends FragmentPagerAdapter { 
    final int PAGE_COUNT = 4; 
    Context context; 
    String a; 
    String b; 
    String c; 
    String d; 

    private String tabTitles[] = new String[] {a,b,c,d }; 

    public ViewProfileAdapter(FragmentManager fm, Context context) { 
     super(fm); 
    this.context = context;//this assignment is for future use of context object 
    a=context.getResources().getString(R.string.viewkundli_tab_kundli); 
     b=context.getResources().getString(R.string.viewkundli_tab_remedies); 
     c=context.getResources().getString(R.string.viewkundli_tab_predictions); 
     d=context.getResources().getString(R.string.viewkundli_tab_panchang); 
    } 

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

    @Override 
    public Fragment getItem(int position) { 
     switch (position) { 
      case 0: 
       return ViewKundli_1.newInstance(position); 

      case 1: 
       return ViewKundli_2.newInstance(position); 

      case 2: 
       return ViewKundli_3.newInstance(position); 

      case 3: 
       return ViewKundli_4.newInstance(position); 

     } 
     return null; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     // Generate title based on item position 
     return tabTitles[position]; 

    } 

} 

調用上述建築工,從你的活動如下

new ViewProfileAdapter(getSupportFragmentManager(), getActivity());//Support lib 
new ViewProfileAdapter(getFragmentManager(), getActivity());//without support lib and Android API greater than 3.0 

調用上述建築工,如下從片段

new ViewProfileAdapter(getChildFragmentManager(), getActivity()); 
+0

我不確定'ViewProfileAdapter'實際上是一個Fragment的內部類。無論如何,這仍然不是最好的方法。正如我的回答中所述,最好在構造函數中傳遞Context。 –

+0

無論您是否傳遞Context,它仍然是Activity的一部分。 – lavan

0

您可以在應用程序類是這樣的初始化上下文,

public class Application extends Application {

private static Context context; 

public static synchronized Context getContext() { 
    return context; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    context = this; 

    ); 
} 

}

,然後在你的適配器,您可以使用該上下文關係

資源資源= Application.getContext()getResources()。

a = resources.getString(R.string.viewkundli_tab_kundli);

相關問題