我需要你的帮助请完成我的第一个android项目,我的目标是根据偏好设置复选框的状态,所以这就是我尝试过的:
<CheckBox
android:id="@+id/checkBoxfriendRequests"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" Friend requests"
android:textSize="23sp"
android:gravity="center_vertical"
android:onClick="onCheckboxClicked" />
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
// Add the fragment on initial activity setup
faceFrag = new FacebookFragment();
getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, faceFrag)
.commit();
} else {
// Or set the fragment from restored state info
faceFrag = (FacebookFragment) getSupportFragmentManager()
.findFragmentById(android.R.id.content);
}
ActionBar myActionBar = getSupportActionBar();
myActionBar.setHomeButtonEnabled(false);
getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getSupportActionBar().setCustomView(R.layout.abs_layout_face);
// get view
LayoutInflater layoutInflater = LayoutInflater.from(FacebookActivity.this);
final View v = layoutInflater.inflate(R.layout.activity_facebook, null);
// set sharedPrefernces editor
facePrefs = this.getPreferences(MODE_PRIVATE);
editor = getPreferences(MODE_PRIVATE).edit();
// checkBoxfriendRequests status
checkBoxfriendRequests = (CheckBox) v.findViewById(R.id.checkBoxfriendRequests);
if(facePrefs.getBoolean("friendRequest", false)){
checkBoxfriendRequests.setChecked(true);
Log.d("sami","checkbox is cheked");
}
else{
checkBoxfriendRequests.setChecked(false);
Log.d("sami","checkbox is uncheked");
}
}
public void onCheckboxClicked(View view) {
boolean checked = ((CheckBox) view).isChecked();
// Check which checkbox was clicked
switch(view.getId()) {
case R.id.checkBoxfriendRequests :
// add to preferences
editor.putBoolean("friendRequest", checked );
editor.commit();
if(checked)
Log.d("sami", " checked true" );
else
Log.d("sami", " checked false" );
break;
.....
}
}
关于活动创建我可以在LogCat中看到复选框被正确选中/取消选中但是看起来它始终是未选中的,无论是什么是首选项参数。
答案 0 :(得分:1)
确保您没有意外禁用复选框:
checkbox.setEnabled(false);
当我打算将其设置为未选中时,这是我的错误:
checkbox.setChecked(false);
答案 1 :(得分:0)
解决方案1:
public void onCheckboxClicked(View view)
中的
使用
boolean checked = checkBoxfriendRequests.isChecked();
即使视图是Checkbox,你仍然需要先使用findViewById
解决方案2:
删除android:onClick="onCheckboxClicked"
使用setOnCheckedChangeListener
checkBoxfriendRequests= (CheckBox) v.findViewById(R.id.checkBoxfriendRequests);
checkBoxfriendRequests.setChecked(facePrefs.getBoolean("friendRequest", false));
checkBoxfriendRequests.setOnCheckedChangeListener(new OnCheckedChangeListener(){
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
editor.putBoolean("friendRequest", arg1);
editor.commit();
}
});
答案 2 :(得分:0)
解决方案:
将此行添加到onCreateView(片段):
facePrefs = this.getActivity().getPreferences(0);
editor = this.getActivity().getPreferences(0).edit();
然后我们可以访问片段类中的复选框而不是活动。