2013-04-30 35 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

回答

相关问题