Java 在类中实现SharedReference,以便能够从多个片段中获取和保存数据

Java 在类中实现SharedReference,以便能够从多个片段中获取和保存数据,java,android,persistence,Java,Android,Persistence,我有一个带有选项卡的应用程序,在一个选项卡下有一个listframent,如果我单击一个listframent,我会看到另一个listframent,如果我单击其中的一个项目,我会看到一个片段,该片段以编程方式添加了TextView。 如果单击其他选项卡,我将使用以下行: container.removeAllViews(); 使选项卡之间的切换正常工作 现在我想在具有文本视图的片段中实现一个按钮,我想要一个变量,如果按下按钮,我可以+1,我想记住这一点,因为我总是想显示在另一个选项卡中按下了

我有一个带有选项卡的应用程序,在一个选项卡下有一个
listframent
,如果我单击一个listframent,我会看到另一个listframent,如果我单击其中的一个项目,我会看到一个片段,该片段以编程方式添加了TextView。 如果单击其他选项卡,我将使用以下行:

container.removeAllViews();
使选项卡之间的切换正常工作

现在我想在具有
文本视图的片段中实现一个
按钮
,我想要一个变量,如果按下按钮,我可以+1,我想记住这一点,因为我总是想显示在另一个选项卡中按下了多少按钮。我还想存储按钮是否按下

这样做的最佳方式是什么?我用电话线的时候可能吗

container.removeallview()

因此,我研究了
SharedReferences
,许多示例在
活动中有按钮
,但在其他
片段中有
按钮
。从这些片段中,我想保存每个
按钮的状态(保存它被按下),并在按下任何
按钮时增加一个变量

当我运行应用程序并按下按钮时,我得到一个错误,它是NullPointerException,并且 主线程被挂起,调试器在行上抱怨:

preferences.savePrefs("BUTTON", true);
现在有人知道为什么或者如何解决这个问题了吗


编辑:如果我没有将
SharedPreferences
作为一个类,并将这三个方法放在
片段中
按钮所在的位置,然后从
getApplicationContext()
更改为
getActivity()
。但是,既然我希望能够保存多个
片段
,最好是为此创建一个类,对吗?如果
SharedPreferences
是一个类,我认为这可能与我如何获取上下文有关


这是一个带有
按钮的
片段

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);
    }
}
这是
SharedReferences

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();
    }   
}

为应用程序获取任何数据/变量值的最佳方法是将其保存在SharedReference中

参考:

完整的细节


存储在SharedReference中的值将保留,直到用户卸载应用程序。

为应用程序获取任何数据/变量值的最佳方法是将其保存在SharedReference中

参考:

完整的细节


存储在SharedReference中的值将保留,直到用户卸载应用程序。

我认为SharedReferences可能有用@Sweety是对的,您需要将变量存储在SharedReferences中。这里是如何使用它的示例我认为SharedReferences可能有用@Sweety是对的,您需要将变量存储在SharedPreferences中。这里是如何使用它的示例。谢谢,我将研究这个。我已经研究了这个,并且在顶部添加了一些代码和问题。谢谢,我将研究这个。我已经研究了这个,并且在顶部添加了一些代码和问题。