我正在尝试实施类似于许多应用程序用作简介的小型幻灯片,例如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;
}
答案 0 :(得分:1)
您可以在清单中的IntroActivity声明中添加android:noHistory="true"
属性。
参考this
或者您可以通过构造函数将活动引用传递给片段或适配器claa并调用activity.finish()
类似于new Adapter(mActivity)
并致电mActivity.finish()