类似onBackPressed()的片段?

时间:2014-07-14 19:56:47

标签: android android-fragments

您好我的Android应用程序正在使用片段。我想知道是否有一种方法可以在我的应用程序中使用片段的onBackPressed()方法。我有上一个和下一个按钮,但截至目前我只是创建新的片段并替换,并且没有任何数据被保存。有没有办法保存我的数据/一旦我前进就回去?

3 个答案:

答案 0 :(得分:1)

Fragment的概念与Activity不同。

一个Activity可能有多个Fragments,请阅读:

  

Fragment表示行为或用户界面的一部分   Activity。您可以将单个活动中的多个片段组合到一起   构建多窗格UI并在多个活动中重用片段。您   可以将片段视为活动的模块化部分,具有   它自己的生命周期,接收自己的输入事件,你可以   在活动运行时添加或删除(有点像" sub   活动"您可以在不同的活动中重复使用。)

在此处查看更多内容:http://developer.android.com/guide/components/fragments.html


<强> SOLUCTION

因此,如果您想在Fragment中处理onBackPressed行为,您可以这样做:

package com.example.stackoverflowsandbox;

import android.app.Activity;
import android.app.Fragment;

public class MainActivity extends Activity {

    public class MyFragment extends Fragment {
        public void onBackPressed() {
            // your code here...
        }
    }

    private MyFragment myFragment;

    @Override
    public void onBackPressed() {
        // super.onBackPressed(); // comment to not back

        this.myFragment.onBackPressed(); // the onBackPressed method of Fragment is a custom method
    }
}

答案 1 :(得分:1)

抱歉,不知道我是否理解你的问题,但如果想法并控制其片段中的直接后退按钮,并从中执行一些数据持久性任务,则可以将你的片段添加到控件堆栈FragmentManager中,如下。

FragmentManager fm = getSupportFragmentManager();

MyFragment mMyFragment = new MyFragment();

fm.beginTransaction()
    .add(mMyFragment, "mMyFragment")
    .addToBackStack( null )
    .commit();

在片段中,您需要实现接口OnBackStackChangedListener

在片段中:

public class MyFragment extends Fragment implements OnBackStackChangedListener {

    @Override
    public void onBackStackChanged() {
       //your code here
    }
}

如果你只保留值

public class MyFragment extends Fragment {

    String valeu;

    @Override
    public void onCreate( final Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );

        if ( savedInstanceState != null ) {
            this.valeu = savedInstanceState.getString( "key" );
        }
    }

    @Override
    public void onSaveInstanceState( final Bundle outState ) {
        super.onSaveInstanceState( outState );

        outState.putString( "key", "Your content" );
    }
}

答案 2 :(得分:0)

移动到前片段时,使用onSaveInstanceState()保存上一片段的状态 移动时恢复前一个片段中onCreate()或onCreateView()的状态