我有一個帶有選項卡的應用程序,並且在一個選項卡下我有一個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
是一個類,它可能與我如何獲得上下文有關。
這是一個Fragment
有Button
:
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();
}
}
我認爲sharedPreferences可以是有用的http://developer.android.com/reference/android/content/SharedPreferences。html – 2013-04-30 08:45:38
@Sweety是對的,您需要將變量存儲在sharedPrefernces中 這裏是如何使用它的示例http://android-er.blogspot.co.il/2011/01/example-of-using-sharedpreferencesedito .html – Elior 2013-04-30 08:49:15