2016-08-19 58 views
0

我能夠使用共享首選項來存儲複選框的值,但我無法保存動作其意圖做的事情。我需要的操作是當複選框被選中時按鈕應該顯示,如果複選框未選中,按鈕不應該顯示(隱藏/顯示按鈕在不同的活動中完成)。所以我所做的是我下的if/else條件共享首選項保存複選框操作

final CheckBox checkBox = (CheckBox) findViewById(R.id.add_fb); 
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
    final SharedPreferences.Editor editor = preferences.edit(); 

    checkBox.setChecked(preferences.getBoolean("checked",false)); 

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     isCheckedValue = isChecked; 
     editor.putBoolean("checked", isChecked); 
     editor.apply(); 

      if(checkBox.isChecked()) { 
       isCheckedValue = isChecked; 
       editor.putBoolean("checked", true); 
       editor.apply(); 
      }else{ 
       editor.putBoolean("checked", false); 
       editor.apply(); 
      } 
     } 
    }); 

如果chkbox檢查其值將使用意圖使用布爾傳遞數據傳遞onBubbleClickin.putExtra("yourBoolName", isCheckedValue);你可以在注意到它下面一串代碼

傳遞的值 isCheckedValue = isChecked;
private void addNewBubble() { 
     BubbleLayout bubbleView = (BubbleLayout)LayoutInflater.from(MainActivity.this).inflate(R.layout.bubble_layout, null); 
     bubbleView.setOnBubbleRemoveListener(new BubbleLayout.OnBubbleRemoveListener() { 
      @Override 
      public void onBubbleRemoved(BubbleLayout bubble) { 
       finish(); 
       System.exit(0); 
      } 
     }); 
     bubbleView.setOnBubbleClickListener(new BubbleLayout.OnBubbleClickListener() { 

      @Override 
      public void onBubbleClick(BubbleLayout bubble) { 
       Intent in = new Intent(MainActivity.this, PopUpWindow.class); 
       in.putExtra("yourBoolName", isCheckedValue); 
       startActivity(in); 

      } 
     }); 
     bubbleView.setShouldStickToWall(true); 
     bubblesManager.addBubble(bubbleView, 60, 20); 
    } 

工作原理:在一開始的按鈕不會顯示該複選框被點擊,直到一旦複選框被選中,並從來沒有選中該複選框後,獲取隱藏的按鈕被顯示出來。
它是如何工作的如果複選框被選中並且按鈕應該隱藏,如果複選框未被選中,該按鈕應該顯示。

+0

嘗試使用'.commit()'而不是'.apply()',我相信'.commit'是同步的,而另一個則在後臺運行。 – CookieMonster

+0

@CookieMonster它並沒有真正幫助。 –

回答

1

在你的if-else塊中,你並不真正更新isCheckedValue的值false的條件。所以,這需要修復。我也重構了一下你的代碼。請嘗試以下操作:

final CheckBox checkBox = (CheckBox) findViewById(R.id.add_fb); 
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this); 
final SharedPreferences.Editor editor = preferences.edit(); 

checkBox.setChecked(preferences.getBoolean("checked",false)); 

checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     isCheckedValue = isChecked; 
     editor.putBoolean("checked", isChecked); 
     editor.apply(); 
    } 
}); 
+0

@GladwinJames上面的代碼應該工作得很好。你不需要'onCheckedChanged'內的if-else塊。 – Shaishav

+0

因此你提供的代碼也會記住複選框的值(選中/取消選中)?但你怎麼能xplain請(我只是一個初學者)解釋會真的幫助。 –

+1

是的,行'isCheckedValue = isChecked;'會記住,以便我們可以將值傳遞給下一個活動。並在這之後的幾行將值寫入我們的'SharedPreference' ...試試吧 – Shaishav