0

SQLite データベースを使用して情報を保存する Android アプリを開発しています。これらの情報の一部を取得して、ラジオボタンを使用して AlertDialog に追加しようとしていますが、デバッグすると、この RuntimeException: requestFeature() を呼び出してからコンテンツ を追加する必要があります。エラーは次の場所にあると思います:

shop_type.setContentView(R.layout.shop_list_selection);

しかし、私はそれを修正する方法がわかりません。

ImageButton をクリックしたときのコードは次のとおりです。

    ImageButton shopping = (ImageButton)findViewById(R.id.gotoshop);
    shopping.setOnClickListener(new OnClickListener() { 

      @Override
      public void onClick(View v) { 

          // Get infos from DB
          Cursor lists = dbAdapter.select("ls_tipo_lista", new String[] {"id", "nome"}, null, null, null, null, null);

          // Fetch data if exists
          if(lists.getCount() > 0)
          {
              // Create AlertDialog
              AlertDialog shop_type = new AlertDialog.Builder(MenuActivity.this).create();

              // Set title and layout
              shop_type.setTitle("Tipo di spesa");
              shop_type.setContentView(R.layout.shop_list_selection);

              // Get RadioGroup from shop_list_selection.xml
              RadioGroup opts = (RadioGroup)shop_type.findViewById(R.id.rbshop);

              // Fetch data
              while(lists.moveToNext())
              {
                  // Create radio button instance
                  RadioButton rdbtn = new RadioButton(MenuActivity.this);

                  // Add data
                  rdbtn.setId(lists.getInt(0));
                  rdbtn.setText(lists.getString(1));

                  // Add to radiogroup
                  opts.addView(rdbtn);
              }

                      // Show dialog
              shop_type.show();
          }
      }
    });

XML レイアウトは次のとおりです。

<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rbshop"      android:layout_width="wrap_content"         android:layout_height="wrap_content"
  android:orientation="vertical" >    </RadioGroup>
4

2 に答える 2

1

エラーが発生requestFeature() must be called before adding contentした場合は、ウィンドウを間違った順序で作成しようとしていることを意味します。
このエラーを回避するには、AlertDialog.Builderクラスを利用することをお勧めします。

AlertDialog.Builder builder = new AlertDialog.Builder(MenuActivity.this);

// Create the View to populate the RadioButtons
View view = LayoutInflater.from(MenuActivity.this).inflate(R.layout.shop_list_selection, null, false);

// Get RadioGroup from shop_list_selection.xml
RadioGroup opts = (RadioGroup)view.findViewById(R.id.rbshop);

// Fetch data
while(lists.moveToNext())
{
    // Create radio button instance
    RadioButton rdbtn = new RadioButton(MenuActivity.this);

    // Add data
    rdbtn.setId(lists.getInt(0));
    rdbtn.setText(lists.getString(1));

    // Add to radiogroup
    opts.addView(rdbtn);
}

// Set title and layout
builder.setTitle("Tipo di spesa");
builder.setView(view);

// Show dialog
AlertDialog shop_type = builder.create();
shop_type.show();
// This works too for a one-off dialog: builder.show();
于 2012-11-16T18:34:57.223 に答える
0

requestFeature() の後に setContentView() を呼び出します。

shop_type.show(); を呼び出します。AlertDialog shop_type = new AlertDialog.Builder(MenuActivity.this).create(); の直後

于 2012-11-16T19:16:33.437 に答える