0

メイン アクティビティと 2 つのフラグメントがあります。私の主な活動には、フラグメントをナビゲートするナビゲーション ドロワーがあります。私はこのように押された戻るボタンを処理します:

@Override
public void onBackPressed() {
    if (getFragmentManager().getBackStackEntryCount() > 0) {
        getFragmentManager().popBackStackImmediate();
    } else {
        super.onBackPressed();
    }
}

2 つのフラグメント間を移動した後、戻るボタンを押すと、バックスタックから最後のフラグメントが取得されます。ただし、フラグメントから別のフラグメントに移動することはできません。

より明確:

1 つのアクティビティ (ナビゲーション ドロワー付き) と 2 つのフラグメントがあります。ナビゲーション ドロワーから、両方のフラグメントに何度でも移動できます。しかし、戻るボタンを押すと、常に に戻りたいと思いますmain_activity.xml

4

3 に答える 3

1

アクティビティをナビゲートするときは、次Intentのように s を使用するのが最善の方法です (質問が理解できた場合)。

Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
于 2015-05-15T14:13:45.310 に答える
0
**OnCreate() :-**


public boolean onKeyDown(int keyCode, KeyEvent event)
 {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Intent returnIntent = new Intent();
            setResult(RESULT_CANCELED, returnIntent);
            this.finish();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

ActionBar mActionBar = getActionBar();
        mActionBar.setDisplayShowHomeEnabled(false);
        mActionBar.setDisplayShowTitleEnabled(false);

LayoutInflater mInflater = LayoutInflater.from(this);

View mCustomView = mInflater.inflate(R.layout.actionbar_category_feed_list, null);

        RelativeLayout rrBack = (RelativeLayout) mCustomView.findViewById(R.id.rr_back);
        TextView title = (TextView) mCustomView.findViewById(R.id.txt_title);
        title.setText("");
        title.setTypeface(typeFaceMedium);
        rrBack.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                mTracker.send(new HitBuilders.EventBuilder().setCategory("" + userUsername).setAction("On Search Feed Screen").setLabel("Pressed Back Button").build());
                Intent returnIntent = new Intent();
                setResult(RESULT_CANCELED, returnIntent);
                finish();
            }
        });
        mActionBar.setCustomView(mCustomView);
        mActionBar.setDisplayShowCustomEnabled(true);

**actionbar_category_feed_list.xml**

?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    android:background="@android:color/white" >

    <RelativeLayout
        android:id="@+id/rr_back"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true" >

        <ImageView
            android:id="@+id/img_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:focusable="false"
            android:src="@drawable/back_red" />
    </RelativeLayout>

    <com.converza.library.CustomTextView
        android:id="@+id/txt_title"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@+id/rr_back"
        android:gravity="center_vertical"
        android:paddingLeft="8dp"
        android:text="@string/app_name" />

</RelativeLayout>



**At last in your fragment Activity use a OnactivityResult() for get a Returnintent from Activity.**

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Const.FEEDDETAIL && resultCode == Activity.RESULT_OK) {
            Log.e(tag, "DatashBoard Const.FEEDDETAIL RESULT_OK");
        } else if (requestCode == Const.FEEDDETAIL && resultCode == Activity.RESULT_CANCELED) {
            Log.e(tag, "DatashBoard Const.FEEDDETAIL RESULT_CANCELED");
        }
    }
于 2015-05-15T14:25:15.290 に答える
0

タグでフラグメントを見つけて、それがnullかどうかを確認する必要があります。nullの場合は、そのフラグメントを置き換えるか、フラグメントが非表示の場合はフラグメントを再度表示する必要があります。

    @Override
    public void onBackPressed() {
             Fragment fr = getSupportFragmentManager()
                .findFragmentByTag("Fragment_Tag");

        if (fr == null) {
            getSupportFragmentManager()
                .beginTransaction()
                .replace(R.id.container,
                        new Main_Fragment(), "Fragment_Tag").commit();
        } else {
            finish();
        }
}
于 2015-05-15T14:25:31.337 に答える