【问题标题】:can't make checkbox checked无法选中复选框
【发布时间】:2013-07-20 15:52:28
【问题描述】:

我需要你的帮助来完成我的第一个 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 中看到复选框已正确选中/未选中,但视觉上它开始时始终未选中,无论偏好参数是什么。

【问题讨论】:

    标签: java android checkbox sharedpreferences


    【解决方案1】:

    确保您没有意外禁用复选框:

    checkbox.setEnabled(false);
    

    当我打算将其设置为未选中时,这是我的错误:

    checkbox.setChecked(false);
    

    【讨论】:

      【解决方案2】:

      解决方案 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();
              }
      });
      

      【讨论】:

      • 问题仍未解决,即使: facePrefs.getBoolean("friendRequest", false) == true ,该复选框未选中活动创建。
      • 我认为可能是您调用LayoutInflater layoutInflater = LayoutInflater.from(FacebookActivity.this); final View v = layoutInflater.inflate(R.layout.activity_facebook, null); 的方式错误,因此视图没有响应。
      【解决方案3】:

      解决方案:
      将此行添加到 onCreateView (fragment) :

      facePrefs = this.getActivity().getPreferences(0);
      editor = this.getActivity().getPreferences(0).edit();
      

      然后我们可以从片段类而不是活动中访问复选框。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        相关资源
        最近更新 更多