4

私のアプリは、レストラン サーバーのシフト売上を追跡して、予算を立てるのに役立ちます。過去のシフトを表示するアクティビティでは、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>

そこに何かアイデアはありますか?

4

4 に答える 4

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---

   }
于 2012-10-19T04:47:05.457 に答える
1

問題が見つかりましたが、質問で提供した情報からは答えが見えませんでした。問題は粗雑でした。

これは私の最初のプロジェクトとして始まり、数か月前にデータベースの問題を解決するための不手際の試みで、onCreate() のほぼ同じコードで onStart() と onRestart() を余分にオーバーライドしました。onCreate は時間の経過とともに変更されましたが、これらのメソッドは変更されていません。それらを削除すると、コードは完全に機能しました。

私は質問でそれらの方法を示していませんでした。ごめん!

助けてくれてありがとう!私は今どうすればいい?質問を削除しますか?

于 2012-10-21T18:19:28.483 に答える
0

それは動作するはずです..ウルxmlで。android:clickable="true" Javaでラジオボタンのクリック可能なオプションを指定できます..

public void onCheckedChanged(RadioGroup group, int checkedId) {
    switch(checkedId){
    case R.id.RadioBoth :
        populateAllShifts();
        break;
case R.id.RadioDinnerOnly:
        populatDinnerShifts();
        break;
    //-----
default:

break;
   }
于 2012-10-19T05:45:54.373 に答える
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");
    }
}
于 2012-10-19T03:29:47.577 に答える