2

アプリケーションでアクションバーを作成するために、android-actionbar (https://github.com/johannilsson/android-actionbar) を使用しています。ボタン(アクション)を追加するには、次のコードを使用します:

Intent myIntent = new Intent(this,SelectionCamera.class);
myIntent.putExtra("ledp",(Parcelable)Dp);
myIntent.putExtra("cam",this.numCam );
IntentAction actionCam = new IntentAction(this, 
                myIntent, 
                R.drawable.ic_camera
            );
actionBar.addAction(actionCam);

これは問題なく機能しますが、アクティビティを開始して、そこから結果を取得する必要があります(startActivityForResult())。mimic-native-api ブランチを使用すると簡単に思えますが、actionBar のバージョンを変更したくありません。解決策はありますか?

4

1 に答える 1

3

編集:現在、android-actionbar の代わりにActionBarSherlockを使用することをお勧めします。新しいデバイスでネイティブの Android アクション バーを使用できるようにし、古いデバイスで完全な API 互換性を提供します。


元の答え:

mimic-native-api ブランチをお勧めします。これはより最新で、XML からアクションを定義できるなど、非常に便利な機能がいくつかあります。(大規模なプロジェクトで使用していますが、うまく機能しています。)

ただし、AbstractAction の独自の実装を作成することにより、マスター ブランチでこれを実行できるはずです。たとえば、「ResultAction」と呼ばれる IntentAction に類似した別のクラスを追加し、mContext.startActivity(mIntent) の代わりに mContext.startActivityForResult(mIntent) を使用するようにします。 )。また、監視したい requestCode を onActivityResult に保存する必要があります。

いくつかの完全にテストされていないサンプル コード:

public static class ResultAction extends ActionBar.AbstractAction {
    private Context mContext;
    private Intent mIntent;
    private int mRequestCode;

    // note: you could use this to start activities normally (with no result)
    //       by using a negative value for requestCode.
    public ResultAction(Context context, Intent intent, int drawable, int requestCode) {
        super(drawable);
        mContext = context;
        mIntent = intent;
        mRequestCode = requestCode;
    }

    @Override
    public void performAction(View view) {
        try {
           mContext.startActivityForResult(mIntent, mRequestCode);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(mContext,
                    mContext.getText(R.string.actionbar_activity_not_found),
                    Toast.LENGTH_SHORT).show();
        }
    }
}

ここに記載されているように、結果コードを取得するには、アクティビティで onActivityResult をオーバーライドする必要があります。

于 2011-06-27T17:58:14.480 に答える