2014-12-20 3 views
1

Итак, я узнал о создании вкладок на Android с помощью FragmentActivity от THIS TUTORIAL. Итак, теперь у меня есть FragmentActivity, который содержит 3 вкладки, что означает, что в этих вкладках есть три разных фрагмента.Android: Использование SharedPreferences с макетом вкладок

класс FragmentActivity

public class ProductSingle_Activity extends FragmentActivity { 

    ViewPager Tab; 
    public TabPagerAdapter TabAdapter; 
    ActionBar actionBar; 
    Context ctx = this; 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.product_single); 

.... and so on 

И у меня есть два фрагмента, которые становятся двумя язычками FragmentActivity:

Один фрагмент:

public class details_frag_activity extends Fragment { 

    Context ctx; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View android = inflater.inflate(R.layout.details_frag, container, false); 

    } 
} 

Так что я сохранил некоторые информация, такая как «имя» и «описание» в SharedPreferenc es приложения.

SharedPreferences pref = ctx.getSharedPreferences("product_details", 0); 
//ctx being the context 
Editor editor = pref.edit(); 
editor.putString("pname", name); 
editor.commit(); 

Я хочу, чтобы получить доступ к этим информации через один из фрагментов, как это:

public class details_frag_activity extends Fragment { 

    Context ctx; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View android = inflater.inflate(R.layout.details_frag, container, false); 

     SharedPreferences pref = ctx.getSharedPreferences("product_details", 0); 
//I cant access the ctx (Context). To avoid the error I just declared a local variable. I need to get the context of the FragmentActivity 
     String pname = pref.getString("pname", null); 

Однако я не могу получить доступ к «CTX» (Context) через фрагмент. Есть ли способ передать контекст FragmentActivity для классов фрагментов, чтобы они могли извлекать сохраненную информацию из SharedPreferences? ИЛИ есть ли лучший способ доступа к общей информации через Фрагменты (вкладки)?

+0

- мой ответ разработан. –

ответ

1

в классе fragement один метод есть, используя это, вы можете получить контекст.

private Activity activity; 
@Override 
public void onAttach(Activity activity) { 
    this.activity = activity; 
    super.onAttach(activity); 
} 

Просто присвойте этот параметр методу полю, после чего вы можете получить доступ к этой ссылке на действие в качестве контекста, где захотите. потому что Activity является подклассом контекста.

+0

Это вы говорите? [link] (http://justpaste.it/iim3) – Pjayness

+0

Спасибо, что это сработало! :) Но знаете ли вы, как делиться массивом строк с помощью общих настроек? – Pjayness

+0

@BenildusRatnayake, пожалуйста, кратко объясните свое требование? –

2

Вы можете переопределить onAttach метод в вашем details_frag_activity и создать ProductSingle_Activity объект внутри класса details_frag_activity использования этого ...

@Override 
public void onAttach(Activity activity) { 
    // TODO Auto-generated method stub 
    super.onAttach(activity); 
    this.activity = (ProductSingle_Activity) activity; 
} 

или просто попробовать

SharedPreferences pref = getActivity().getSharedPreferences("product_details", 0); 
+0

Это то, что вы говорите? [link] (http://justpaste.it/iim3) – Pjayness

+0

да, пожалуйста, попробуйте – jenuine

2

Как уже упоминалось в предыдущем ответе, вы можете просто использовать:

SharedPreferences pref = getActivity().getSharedPreferences("product_details", 0); 
Смежные вопросы