Android - 使用Intent清除backstack,而不是从Activity调用

时间:2015-03-26 23:51:59

标签: android android-intent android-fragments android-activity back-stack

我正在尝试实施类似于许多应用程序用作简介的小型幻灯片,例如Google文档。

我将适配器与活动分开,以保持一切整洁:

public class IntroActivity extends FragmentActivity {

    private int[] mResources = {
            R.drawable.slide1,
            R.drawable.slide2,
            R.drawable.slide3,
            R.drawable.slide4
    };

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

        CustomPagerAdapter customPagerAdapter = new CustomPagerAdapter(this, mResources);

        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);
        viewPager.setAdapter(customPagerAdapter);
    }

}

CustomPagerAdapter中的以下代码处理最后一张幻灯片上按钮的点击事件,该按钮通过意图打开MainActivity。非常标准的东西:

    @Override
    public Object instantiateItem(ViewGroup container, int position) {

        if (position == (mResources.length - 1)) {
            System.out.println("POSITION " + position);

            View itemView = mLayoutInflater.inflate(R.layout.pager_last_item, container, false);

            ImageView imageView = (ImageView) itemView.findViewById(R.id.lastImageView);
            imageView.setImageResource(mResources[position]);

            Button btn = (Button) itemView.findViewById(R.id.btn_open_main_activity);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(mContext, MainActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                    mContext.startActivity(intent);
                    //TODO destroy IntroActivity.java
                }
            });

            container.addView(itemView);

            return itemView;
          }
         (...) //if not the last slide...

   }

但即使使用那些Intent标志,它似乎也不起作用。我无法从finish()访问IntroActivity方法。 该应用运行正常,但当我按下MainActivity中的后退按钮时,它会将我带回到最后一张幻灯片。 有办法解决吗?

编辑 - 这就是我创建PagerAdapter的方式。我只是从IntroActivity传递上下文和资源数组:

public class CustomPagerAdapter extends PagerAdapter {

    private Context mContext;
    private LayoutInflater mLayoutInflater;
    private int[] mResources;

    public CustomPagerAdapter(Context context, int[] mResources) {
        this.mContext = context;
        this.mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.mResources = mResources;
    }

1 个答案:

答案 0 :(得分:1)

您可以在清单中的IntroActivity声明中添加android:noHistory="true"属性。

参考this

或者您可以通过构造函数将活动引用传递给片段或适配器claa并调用activity.finish()

类似于new Adapter(mActivity)并致电mActivity.finish()