2017-01-27 8 views
0

Как получить значение Checkbox, которое находится в Activity, а в его onCreate есть метод findviewbyId.Извлечь значение виджета в действие из другого файла Java в android

public class abc extends Activity { 
Checkbox mon; 

    public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.my_xml); 
      mon = (CheckBox)findViewById(R.id.checkbox_mon); 
    } 
    public boolean check() 
    { 
    if (mon.isChecked()) 
    return true; 
    else 
    return false; 
    }} 

Теперь, есть другой Java класс, в котором я передаю объект класса активности и вызов этого метода, который возвращает значение.

abc a =new abc(); 
a.check(); 

Но он не работает. Я думаю, что есть проблема с заявлением . А также, если актив- ности не открывается, я хочу, чтобы показать значение DEFUALT который я поставил в XML-файле

android:checked="false" 
+0

'абв а = новый ABC();' значит создавать новый объект, который не имеет никакой связи с оригинальной беговой активности –

+0

если я не работает, и все еще хотите получить это значение флажка (ожидая получить значение по умолчанию) , как я должен делать это из другого файла?:( – UrviG

+0

, если действие не выполняется, то не очевидно, что значение будет «false» –

ответ

0

Установите статическую переменную и присвоить значение CheckBox:

public class abc extends Activity { 
Checkbox mon; 
public static boolean checkBoxValue; //here 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.my_xml); 
     mon = (CheckBox)findViewById(R.id.checkbox_mon); 
} 
public boolean check() 
{ 
if (mon.isChecked()) 
checkBoxValue = true; //here 
return true; 
else 
checkBoxValue = false; //here 
}} 

Другой класс:

public class AnotherClass { 
    ..... 

    public boolean value = abc.checkBoxValue; 
    ....... 

} 

Другой способ

а активность:

public boolean check() 
{ 
if (mon.isChecked()) 
Intent intent = new Intent(this, anotherClass.class); 
intent.putExtra("value", true); 
startActivity(intent); 
return true; 
..... 
    ....... 

другой Activty:

public class AnotherClass extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.anotherclass); 

    boolean value = getIntent().getBooleanExtra("value"); 

    } 
} 
+0

Это не вызовет функцию и, следовательно, значение переменной не будет обновлено .. – UrviG

+0

@UrviG, я не сделал это _This не вызовет функцию_ – W4R10CK

+0

@UrviG, я получил вашу точку. Сначала проверьте значение вида в главном классе java и передайте значение другому. Вызов статуса представления невозможен в другом классе (может быть передан конструктор). – W4R10CK

0

Boolean со статическим модификатором будет достаточно для вашего случая.

public static boolean monValue = false // as you mention the default is false 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_xml); 
    mon = (CheckBox)findViewById(R.id.checkbox_mon); 
    mon.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener { 
    public void onCheckedChanged(CompoundButton btn, boolean b) { 
     monValue = b; 
    } 
    }); 
} 

Тогда вам нужно только boolean x = abc.monValue в другом классе. Но я действительно хочу предложить другой способ общения между классом в течение жизненного цикла Android.


С EventBus

Создать класс, который оборачивает данные события

public class MyCheckboxEvent { 
    public final boolean checked; 

    public MyCheckboxEvent(boolean checked) { 
    this.checked = checked; 
    } 
} 

Затем добавьте EventBus.getDefault().post(new MyCheckboxEvent(booleanValue)); на вас а активность

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_xml); 
    mon = (CheckBox)findViewById(R.id.checkbox_mon); 
    mon.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener { 
    public void onCheckedChanged(CompoundButton btn, boolean b) { 
     EventBus.getDefault().post(new MyCheckboxEvent(b)); 
    } 
    }); 
} 

Добавь обработчик любого класса, подписываться на abc Данные события флажка

@Subscribe 
public void handleMyAbcCheckbox(MyCheckboxEvent event) { 
    boolean x = event.checked; 
} 

Затем регистрации и отмены регистрации абонента в соответствии с жизненным циклом

@Override 
public void onStart() { 
    super.onStart(); 
    EventBus.getDefault().register(this); 
} 

@Override 
public void onStop() { 
    super.onStop(); 
    EventBus.getDefault().unregister(this); 
}