Радиогруппа ANDROID не сохраняется на проверяемом changeListener
фрагмент кода того, что я пробовал:
String servng, mealname, strDate;
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId()){
case R.id.btFoodVegetableSave:
mealname = selected;
String serving = calories.getText().toString();
int i = Integer.parseInt(serving.replaceAll("[\\D]", ""));
servng = String.valueOf(i);
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
strDate = sdf.format(new Date());
if ( ( mealname.isEmpty() || servng.isEmpty() ) ){
// call for custom toast
viewErrorToast();
}
else {
boolean didItWork = true;
try{
rgMeal.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
// TODO Auto-generated method stub
switch( checkedId ){
case R.id.rbBreakfast:
BreakFastLog bfLog = new BreakFastLog(Bread_Dark.this);
bfLog.open();
bfLog.createEntry(mealname, servng, strDate);
bfLog.close();
break;
case R.id.rbMorningSnack:
MorningSnackLog msLog = new MorningSnackLog(Bread_Dark.this);
msLog.open();
msLog.createEntry(mealname, servng, strDate);
msLog.close();
break;
case R.id.rbLunch:
LunchLog lunchLog = new LunchLog(Bread_Dark.this);
lunchLog.open();
lunchLog.createEntry(mealname, servng, strDate);
lunchLog.close();
break;
case R.id.rbAfternoonSnack:
AfternoonSnackLog asLog = new AfternoonSnackLog(Bread_Dark.this);
asLog.open();
asLog.createEntry(mealname, servng, strDate);
asLog.close();
break;
case R.id.rbDinner:
DinnerLog dinnerLog = new DinnerLog(Bread_Dark.this);
dinnerLog.open();
dinnerLog.createEntry(mealname, servng, strDate);
dinnerLog.close();
break;
case R.id.rbEveningSnack:
EveningSnackLog esLog = new EveningSnackLog(Bread_Dark.this);
esLog.open();
esLog.createEntry(mealname, servng, strDate);
esLog.close();
break;
}
}
});
}
catch(Exception e){
didItWork = false;
viewErrorToast();
}finally{
if (didItWork){
viewBMRSavedToast();
}
}
} // end of if else statement
break;
XML-макет:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="481dp"
android:background="@drawable/ihealthfirst"
android:orientation="vertical" >
<include
android:layout_width="fill_parent"
android:layout_height="match_parent"
layout="@layout/tabs_menu" />
<TextView
android:id="@+id/tvFoodVegetable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cabbage"
android:layout_marginLeft="15dp"
android:layout_marginTop="10dp"
android:textAppearance="?android:attr/textAppearanceLarge" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<EditText
android:id="@+id/etAmount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="@string/one"
android:inputType="number" >
<requestFocus android:layout_height="wrap_content" />
</EditText>
<Spinner
android:id="@+id/spFoodVegetable"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:prompt="@string/white_bread_prompt" />
</LinearLayout>
<Button
android:id="@+id/btFoodVegetableCalories"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/done"
android:layout_margin="15dp"
android:textColor="@color/darkgreen"
android:textSize="@dimen/padding_extralarge"
android:background="@drawable/btn_meal_selected" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:text="@string/choosemeal"
android:textAppearance="?android:attr/textAppearanceLarge" />
<RadioGroup
android:paddingLeft="10dp"
android:id="@+id/rgSelectMeal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RadioButton
android:id="@+id/rbBreakfast"
android:layout_width="128dp"
android:layout_height="wrap_content"
android:text="@string/breakfast"
android:checked="true" />
<RadioButton
android:id="@+id/rbMorningSnack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/morningsnack" />
<RadioButton
android:id="@+id/rbLunch"
android:layout_width="128dp"
android:layout_height="wrap_content"
android:text="@string/lunch" />
<RadioButton
android:id="@+id/rbAfternoonSnack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/afternoonsnack" />
<RadioButton
android:id="@+id/rbDinner"
android:layout_width="127dp"
android:layout_height="wrap_content"
android:text="@string/dinner" />
<RadioButton
android:id="@+id/rbEveningSnack"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/eveningsnack" />
</RadioGroup>
<Button
android:id="@+id/btFoodVegetableSave"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/save"
android:drawableLeft="@drawable/save24"
android:background="@drawable/nutrition_button_gradiant"
android:textColor="@color/white"
android:layout_gravity="center"
android:layout_marginBottom="15dp" />
</LinearLayout>
Когда пользователь проверяет радиосвязь и нажимает кнопку "Сохранить", он переходит к моему ЗАКЛЮЧИТЕЛЬНОМУ утверждению:
finally{
if (didItWork){
viewBMRSavedToast();
}
Но когда я проверяю сводку (список записей, вставленных / сохраненных в базу данных), она не сохраняется:(что не так с моей обработкой радиогруппы здесь?
1 ответ
Если я вас правильно понимаю, вы хотите, чтобы пользователь нажимал кнопку-переключатель и затем создавал новый BreakFastLog, когда пользователь нажимает "Сохранить". В настоящее время вы делаете checkChangedListener для радиогруппы после нажатия кнопки "Сохранить". Это приведет к тому, что цепочка событий произойдет в обратном порядке от того, что вы хотите (то, что вы видите). Чтобы пользователь мог выбрать радиокнопку и затем щелкнуть "сохранить", вам нужно только извлечь проверенную в данный момент радиокнопку внутри радиогруппы, а не делать checkChangedListener. Это может быть сделано:
int checkedId = rgMeal.getCheckedRadioButtonId()
switch( checkedId ){
case R.id.rbBreakfast:
BreakFastLog bfLog = new BreakFastLog(Bread_Dark.this);
bfLog.open();
bfLog.createEntry(mealname, servng, strDate);
bfLog.close();
break;
case R.id.rbMorningSnack:
MorningSnackLog msLog = new MorningSnackLog(Bread_Dark.this);
msLog.open();
msLog.createEntry(mealname, servng, strDate);
.
.
.
.
}
`