如何使用变量从布局中调用方法

时间:2015-01-03 22:40:22

标签: java android xml checkbox sharedpreferences

我可能会以错误的方式解决这个问题 - 应用我从其他API中得到的知识 - 所以,如果是这样,也许你可以指出我的方向不同。事实是,我似乎找不到任何关于我正在做的事情的例子。我试图从xml布局调用一个方法。我想从各种复选框调用相同的方法,基本上只需单击任何复选框,我想将isChecked状态存储在SharedPreferences文件中。这是我的xml和java:

    <CheckBox
        android:layout]width="194dp"
        android:layout_height="wrap_content"
        android:text="@string/Chri"
        android:id="@+id/chkbxChristmas"
        android:checked="false"
        android:onClick="savePreferencesData(@string/Chri,@+id/chkbxChristmas)"/>


public void savePreferencesData(String preference,int id) {
    SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = prefs.edit();
    CheckBox cb1 = (CheckBox) findViewById(id);
    editor.putBoolean(preference, cb1.isChecked());

    // Commit the edits!
    editor.commit();

    };

正如您所看到的,我正在尝试传递复选框ID和@ string / Chri字符串值(我将此值用作SharedPreferences文件中的标记),因此该方法知道要更新的首选项。

是否可以传递变量,是否有更好的方法来确定哪个复选框正在调用该方法?

我很感激帮助!

只是一个快速更新:由于某些原因我无法让Lister运行......这是我的代码:

public void saveHanuPref(View view) {
    final CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxHanukkah );
   checkBox.setOnCheckedChangeListener(new  CompoundButton.OnCheckedChangeListener()
    {

       @Override
       public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
       {
           if ( isChecked )
           {
               SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
              SharedPreferences.Editor editor = prefs.edit();
               editor.putBoolean(getString(R.string.Hanu), checkBox.isChecked());
               editor.commit();
           }
       }
   });
}

从活动xml(使用onClick)调用这个简单方法确实有效:

  public void saveChriPref(View view) {
    CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxChristmas );
    SharedPreferences prefs = getSharedPreferences(PREFS_NAME, 0);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean(getString(R.string.Chri), checkBox.isChecked());
    editor.commit();
  };

再次感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

正确的方法是设置OnCheckedChangeListener

CheckBox checkBox = ( CheckBox ) findViewById( R.id.chkbxChristmas );
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
    {
        if ( isChecked )
        {
            // perform logic
        }

    }
});

答案 1 :(得分:1)

  1. 您在按钮的onClick()方法中声明的方法只能使用一种输入类型 - 它是包含该按钮的视图。没有其他数据可以指定。

  2. 说,onCLick中的方法应该只是方法的名称,没有参数等。

    android:onClick =“savePreferencesData()”

  3. 假设您正在使用Activity类,这就是应该如何创建方法。

    public void savePreferencesData(View v){     //做你想做的事 }

  4. 您在xml文件中声明的方法应仅存在于同一个Activity类中。说,其他XML文件中的其他按钮无法重复使用此方法。

  5.   

    是否有更好的方法来确定哪个复选框正在调用   方法

    尝试以下代码示例:

    YOUR_CHECKBOX_NAME.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            if(YOUR_CHECKBOX_NAME.isChecked()) {
                System.out.println("Checked");
            } else {
                System.out.println("Un-Checked");
            }
        }
    });