1

私はAndroid開発に非常に慣れていません。

私のMainActivity.javaファイルでは、ユーザーが現在のページと私が作成した別のページonOptionsItemSelected(MenuItem menu)の間をジャンプできるようにするメソッドを宣言しました。MainActivity.javaSettings.java

ユーザーがSettings.javaページに移動し、メニューからオプションをクリックしてHomeも、何も起こりません。これは、クラスではなくクラスでonOptionsItemSelected(MenuItem menu)のみ定義されているためです。MainActivity.javaSettings.java

onOptionsItemSelected(MenuItem menu)fromMainActivity.javaを にコピーすることで、今これを克服していSettings.javaます。しかし、これは非常に冗長です。

異なるクラスで再利用できるメソッドはどこで宣言すればよいですか?

MainActivity.java

public class MainActivity extends Activity {
    ...
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                showMsg("Settings Clicked");
                this.startActivity(new Intent(this, Settings.class));
                return true;
            case R.id.action_home:
                showMsg("Home clicked");
                this.startActivity(new Intent(this, MainActivity.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    private void showMsg(String msg) {
        Toast toast = Toast.makeText(this.getBaseContext(), msg, Toast.LENGTH_LONG);
        toast.show();
    }
}

設定.java

public class Settings extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.settings);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                this.startActivity(new Intent(this, Settings.class));
                return true;
            case R.id.action_home:
                this.startActivity(new Intent(this, MainActivity.class));
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}
4

1 に答える 1

2

BaseActivity共通onOptionsItemSelected()コードを持つActivity という名前を作成する場合、このクラスを拡張して create するとMainActivitySettingsこれらのクラスは両方ともsuperクラス' (つまりBaseActivity's)を使用しonOptionsItemSelected()ます。

別のアプローチは、フラグメントに切り替えることです。これは、フラグメントがホスト アクティビティonOptionsItemSelected()と自身のアクティビティを使用するためです。これらの戦術は両方とも、「集中化された」コードを使用することを可能にし、複数の「カット アンド ペースト」コピーを維持する必要はありません。

于 2013-03-27T17:57:12.217 に答える