2015-01-03 2 views
0

Возможно, я ошибаюсь, применяя то, что знаю из других 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(); 

    }; 

Как вы можете видеть, что я пытаюсь передать идентификатор флажка и @ строка/значение строки ЧРИ (я использую это значение в качестве тега в файле 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(); 
    }; 

Еще раз спасибо за помощь.

ответ

1
  1. Метод вы заявляете в вашем onClick() метод кнопки может принимать только один тип входа - это View, который считает, что кнопки. Никакие другие данные не могут быть указаны.

  2. говорит, что способ в OnClick должен быть только именем метода, никаких параметров и т.д.

    андроид: OnClick = "savePreferencesData()"

  3. Предполагая, вы используете Activity класс, так должен быть создан метод.

    общественного недействительный savePreferencesData (View v) {// делать то, что вы хотите }

  4. Метод, объявленный в файле XML должен присутствовать только в том же классе активности. Сказано, что другие кнопки в других файлах XML не могут повторно использовать этот метод.

есть лучший способ определить, какая опция вызова метода ?

Попробуйте ниже пример кода:

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"); 
     } 
    } 
}); 
+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 
     } 

    } 
}); 
Смежные вопросы