2013-04-30 29 views
1

我有一個帶有選項卡的應用程序,並且在一個選項卡下我有一個listfragment,如果我點擊一個listfragment我來到另一個listfragment並且如果點擊項目那裏我來到一個片段,其中有文字添加以編程方式。 如果我點擊另一個標籤我使用的線路:在類中實現SharedPreferences以便能夠從多個片段中獲取和保存數據

container.removeAllViews(); 

爲了使開關之間的標籤正常工作。

現在我想在textviews片段中實現一個button,我想要一個變量,我可以+1如果按鈕被按下,我想牢記這一點,因爲我總是想顯示多少按鈕在另一個選項卡中被按下。我也想保存按鈕被按下或沒有按下。

這樣做的最好方法是什麼?是否有可能我使用的線路

container.removeAllViews()

所以我看了一下SharedPreferences,很多例子裏面有activity裏面的按鈕,但是我在其他Fragments裏面有Buttons。從這些片段中,我想保存每個Button的狀態(除了按下它)並在按下任何Button時增加一個變量。

當我運行應用程序,並按下按鈕,我得到一個錯誤是一個NullPointerException和 主線程被掛起,並調試抱怨該行:

preferences.savePrefs("BUTTON", true); 

現在任何人都爲何或如何解決這個問題?


編輯:如果我沒有SharedPrefererences作爲本身就是一個類insted的放在Fragment的三種方法,其中Button是,變從getApplicationContext()getActivity()它的工作原理。但既然我想能夠從幾個Fragments中節省,最好的方法就是爲這個課程設置一個班級,對嗎?我認爲如果SharedPrefererences是一個類,它可能與我如何獲得上下文有關。


這是一個FragmentButton

package com.example.easysave; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.TextView; 

public class PlanFragment extends Fragment implements OnClickListener{ 

Button testedPlan; 
SharedPreferences preferences; 

boolean bpressed = false; 
int value = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

} 

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

} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onActivityCreated(savedInstanceState); 

    final LinearLayout linearLayout = (LinearLayout)getActivity().findViewById(R.id.planera_ll); 
    final LinearLayout horiz = new LinearLayout(getActivity()); 
    horiz.setOrientation(LinearLayout.HORIZONTAL); 

    TextView text = new TextView(getActivity()); 
    text.setText("Planera"); 

    Button testedPlan = new Button(getActivity()); 
    testedPlan.setText("Tried"); 
    testedPlan.setId(1); 
    testedPlan.setOnClickListener(this); 

    horiz.addView(text); 
    horiz.addView(testedPlan); 
    linearLayout.addView(horiz); 
} 


@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

    Button button = (Button)v; 

    preferences.savePrefs("BUTTON", true); 

    button.setPressed(true); 
    value = value++; 
    preferences.savePrefs("NUMBER", value); 
    } 
} 

這是SharedPreferences

package com.example.easysave; 

import android.app.Activity; 
import android.content.SharedPreferences.Editor; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 


public class SharedPreferences extends Activity{ 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    loadPrefs(); 
} 

public void loadPrefs(){ 
    android.content.SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    boolean bpressed = sp.getBoolean("BUTTON", false); 
    int value = sp.getInt("NUMBER", 0); 
} 

public void savePrefs(String key, boolean value){ 
    android.content.SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    Editor edit = sp.edit(); 
    edit.putBoolean(key, value); 
    edit.commit(); 
    System.out.println("Sparat!" +edit.commit()); 
} 

public void savePrefs(String key, int value){ 
    android.content.SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    Editor edit = sp.edit(); 
    edit.putInt(key, value); 
    edit.commit(); 
    } 
} 
+1

我認爲sharedPreferences可以是有用的http://developer.android.com/reference/android/content/SharedPreferences。html – 2013-04-30 08:45:38

+0

@Sweety是對的,您需要將變量存儲在sharedPrefernces中 這裏是如何使用它的示例http://android-er.blogspot.co.il/2011/01/example-of-using-sharedpreferencesedito .html – Elior 2013-04-30 08:49:15

回答

相關問題