-1

アプリでSlidingMenu実装を使用しています。android.R.id.homeボタンでサイド メニューを開いたり閉じたりしたいです。Activity 内で Fragment を使用して情報を表示します。ホームボタンを戻るボタンとして機能させたい。

問題は、 Activity 内の Activity の onOptionsItemSelectedがFragmentの onOptionsItemSelected の前に呼び出されることです。これは通常の動作ですか?それとも私は何か間違ったことをしていますか?

私のプロジェクトでも ActionBarSherlock を使用していますが、それは問題ではないと思います。

ここで唯一の解決策は、独自のインターフェイスを実装することですか?

4

2 に答える 2

1

ちょうど昨夜、私はこれに苦労していましたが、最終的にそれを解決することができたので、ここに私の解決策があります: これらは MainActivity からの関連部分です:

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        return super.onOptionsItemSelected(item);
    }

}

これが私のメニューmain.xmlです:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>

</menu>

ここに私のフラグメントがあります:

import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;

public class TestFrag extends SherlockFragment {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        .
        .
        setHasOptionsMenu(true);
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        menu.add(Menu.NONE, android.R.id.home, 100, "Home");
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item){
        switch(item.getItemId())
        {
        case android.R.id.home:
//            Do whatever you want when Home is clicked.
            Toast.makeText(getSherlockActivity(), "Home is clicked", Toast.LENGTH_SHORT).show();
            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }
}

これは私が得ているものです: 親アクティビティとフラグメントの両方のメニュー項目。

これが何らかの形で役立つことを願っています。

于 2013-04-12T05:22:48.473 に答える