0

「設定」の設定が特に必要で、4 つのオプション (年齢、身長、体重、性別) のリストがあります。ここで、各リスト項目は新しい「ビュー」(アクティビティ、ウィンドウ) を開く必要があり、実際にはあまり機能しません。EG、性別はラジオボタンと「OK」ボタンで、性別を共有設定に保存します。

それで、私は「設定」クラスを作成するという素晴らしいアイデアを思いつきました。それはどういうわけかこれを処理します。項目 1 を選択すると、layout1.xml が表示され、Settings クラスから function1 が呼び出されます。

Item2 は、layout2.xml を呼び出し、Settings クラスから function2 を呼び出します。

これは良いアプローチですか、それともフレームごとにクラスを作成し、実際にはラジオボタンを処理するだけの小さな「GenderSelector」クラスを用意する必要がありますか?

4

1 に答える 1

1
  1. ダイアログを使用できます。
  2. アクティビティを開始するために使用しているインテントは、開始されるアクティビティにアクセスできるプリミティブ データを保持できます。次に、開始されたアクティビティに条件付きでコントロールを設定できます。結局、最初のアクティビティに結果を返すことができます。

指定されたモードでアクティビティを開始するためのコード スニペット (モード定数は以下で定義されています):

public class SettingsActivity extends Activity
{
    public static final String EXTRA_MODE = "your_mode_extra_name";
    public static final int MODE_AGE = 0;
    public static final int MODE_GENDER = 1;

    private static final int MODE_DEFAULT = MODE_AGE;

    @Override
    public void onCreate(Bundle savedInstance)
    {
        int mode = getIntent().getIntExtra(EXTRA_MODE, MODE_DEFAULT);

        switch(mode)
        {
            case MODE_AGE:
                setContentView(R.layout.age_mode_layout);
                //TODO: find controls by ID and set their event handlers here
                break;

             case MODE_GENDER:
                setContentView(R.layout.age_mode_gender);
                //TODO: find controls by ID and set their event handlers here
                break;
        }
    }
}

性別を返すコード スニペット:

public class SettingsActivity extends Activity
{
    public static final String EXTRA_GENDER = "your_gender_extra_name";

    public static final int GENDER_FEMALE = 0;
    public static final int GENDER_MALE = 1;

    private void returnGender(int gender)
    {
        setResult(RESULT_OK, new Intent().putExtra(EXTRA_GENDER, gender));
        finish();
    }
}

最後に設定アクティビティを表示し、結果を取得します。

public class MainActivity extends Activity
{
    //actually we could use mode constants from SettingsActivity;
    //just to show that generally this is separate constants set
    private static final int ID_AGE = 0;
    private static final int ID_GENDER = 1;

    private void requestAge()
    {
        Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
        intent.putExtra(SettingsActivity.EXTRA_MODE, SettingsActivity.MODE_AGE);

        startActivityForResult(intent, ID_AGE);
    }

    private void requestGender()
    {
        Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
        intent.putExtra(SettingsActivity.EXTRA_MODE, SettingsActivity.MODE_GENDER);

        startActivityForResult(intent, ID_GENDER);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (resultCode != RESULT_OK)
            return; //something went wrong

        switch(requestCode)
        {
            case ID_GENDER:
                int gender = data.getIntExtra(SettingsActivity.EXTRA_GENDER, -66666);
                //you've got the gender, use it
                break;

            case ID_AGE:
                //get age from the intent and use it
                break;
        }
    }
}
于 2012-09-03T08:55:58.097 に答える