我的应用程序跟踪餐厅服务器的转移销售,以帮助他们预算。在显示过去班次的活动中,我在ListView下创建了一个RadioGroup,以便用户可以选择显示午餐,晚餐或两者。
我已在RadioGroup.onCheckedChangeListener活动中实现,但onCheckedChanged永远不会被调用。我也尝试使用匿名内部类作为监听器,结果相同。
我尝试从这个答案复制/修改代码:https://stackoverflow.com/a/9595528 ...但是当我将@Override
添加到回调函数时,Eclipse编译器给了我一个错误(不是警告),方法必须覆盖超类,快速修复是删除覆盖。
我很确定签名是匹配的,因为它们是使用Eclipse的自动完成和实现方法工具制作的。然后我按照说明将我的java编译器从1.5移动到1.6,并且上面列出的行为似乎都没有改变。
以下是我认为相关的代码:
public class DataActivity extends ListActivity implements OnCheckedChangeListener{
RadioButton rbBoth;
RadioButton rbDinnerOnly;
RadioButton rbLunchOnly;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.database);
// ...
final RadioGroup rgGroup = (RadioGroup)findViewById(R.id.DataRadioGroup);
rbBoth = (RadioButton)findViewById(R.id.RadioBoth);
rbDinnerOnly = (RadioButton)findViewById(R.id.RadioDinnerOnly);
rbLunchOnly = (RadioButton)findViewById(R.id.RadioLunchOnly);
rgGroup.setOnCheckedChangeListener(this);
populateAllShifts();
}
// ...
public void onCheckedChanged(RadioGroup group, int checkedId) {
rbLunchOnly.setText("Click!");
Toast.makeText(getApplicationContext(), "Lunch Only", Toast.LENGTH_LONG).show();
if(group.getCheckedRadioButtonId() == R.id.RadioBoth){
populateAllShifts();
return;
}
if(group.getCheckedRadioButtonId() == R.id.RadioLunchOnly){
populatLunchShifts();
return;
}
if(group.getCheckedRadioButtonId() == R.id.RadioDinnerOnly){
populateDinnerShifts();
return;
}
}
// ...
}
此类中有一个带有自定义适配器的ListView,但如果我的理解和我的XML正确,则RadioGroup应该在列表之外:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/llDataLayout"
android:weightSum="5"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<ListView android:layout_weight="4"
android:layout_width="fill_parent"
android:id="@android:id/list"
android:layout_height="wrap_content">
</ListView>
<RadioGroup
android:layout_weight="1"
android:id="@+id/DataRadioGroup"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<RadioButton android:text="Lunch and Dinner"
android:textSize="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/RadioBoth"/>
<RadioButton android:text="Dinner Only"
android:textSize="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/RadioDinnerOnly"/>
<RadioButton android:text="Lunch Only"
android:textSize="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/RadioLunchOnly"/>
</RadioGroup>
</LinearLayout>
有任何想法吗?
答案 0 :(得分:1)
您已经将checkedId
作为参数获取,这是新检查的单选按钮的唯一标识符。
public void onCheckedChanged(RadioGroup group, int checkedId) {
rbLunchOnly.setText("Click!");
Toast.makeText(getApplicationContext(), "Lunch Only", Toast.LENGTH_LONG).show();
switch(checkedId){
case R.id.RadioBoth :
populateAllShifts();
break;
//--other cases---
}
答案 1 :(得分:1)
发现问题,从我在问题中提供的信息中看不到答案。这个问题很糟糕。
这开始是我的第一个项目,并且在几个月前尝试解决数据库问题时,我在onCreate()中使用几乎相同的代码覆盖了onStart()和onRestart()。 onCreate随着时间的推移发生了变化,而那些方法却没有。一旦我删除它们,代码就完美无缺。
我没有在问题中展示这些方法。遗憾!
感谢大家的帮助!我现在应该怎么做?删除问题?
答案 2 :(得分:0)
你应该使用这种方法:
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
if(isChecked == true)
{
if(buttonView == radioA)
tvInfo.setText("A");
else if(buttonView == radioB)
tvInfo.setText("B");
else if(buttonView == radioC)
tvInfo.setText("C");
}
}
答案 3 :(得分:0)
它应该工作..在你的xml中。你可以通过android:clickable="true"
为radiobuttons提供可点击的选项
在java ..
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId){
case R.id.RadioBoth :
populateAllShifts();
break;
case R.id.RadioDinnerOnly:
populatDinnerShifts();
break;
//-----
default:
break;
}