我使用以下代码,MAX是2页。默认情况下,位置为0并在右侧添加新页面。我给两个布局文件充气。
如何在应用启动时显示page1并在左侧添加新页面? 感谢。
main.xml中
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<android.support.v4.view.ViewPager
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:id="@+id/pagerView" />
</LinearLayout>
Java代码
public class MyPagerActivity extends Activity {
private Context context;
private int pageNumber;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = this;
ViewPager pagerView = (ViewPager)findViewById(R.id.pagerView);
pagerView.setAdapter(new AwesomePagerAdapter());
}
private class AwesomePagerAdapter extends PagerAdapter{
@Override
public void destroyItem(View collection, int position, Object view) {
((ViewPager) collection).removeView((View)view);
}
@Override
public void finishUpdate(View arg0) {
//setPageTitles(getPageNumber());
}
@Override
public int getCount() {
return 2;
}
@Override
public Object instantiateItem(View collection, int position) {
/* TextView tv = new TextView(MyPagerActivity.this);
tv.setText("Bonjour PAUG " + position);
tv.setTextColor(Color.WHITE);
tv.setTextSize(30);
((ViewPager) collection).addView(tv,0);
return tv;*/
View view = getViewToShow(position);
((ViewPager) collection).addView(view,0);
return view;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view==((View)object);
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub
}
}
private View getViewToShow(int position){
View view = null;
View layout;
LayoutInflater mInflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
switch(position){
case 0:
layout = mInflater.inflate(R.layout.elements, null);
view = layout;
break;
case 1: view =
layout = mInflater.inflate(R.layout.elements2, null);
view = layout;
break;
}
return view;
}
}
答案 0 :(得分:119)
您是否尝试过使用setCurrentItem
方法?
答案 1 :(得分:50)
接受的解决方案很好,但在设置适配器后调用此方法很重要。
viewPager.setAdapter(adapterViewPager);
viewPager.setCurrentItem(1);
答案 2 :(得分:6)
默认情况下,您必须将当前值1设置为仅显示一个默认视图。如果您未将setCurrentItem
设置为1,则看不到任何内容。
viewPager.setAdapter(adapterViewPager);
viewPager.setCurrentItem(1)
答案 3 :(得分:0)
您仅需要在片段的首次初始化期间设置页面。稍后,它将从“保存的实例状态”中恢复按用户位置选择的内容。因此,这看起来更好一些:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
pager.adapter = AwesomePagerAdapter()
if (savedInstanceState == null) {
pager.currentItem = 1
}
}
答案 4 :(得分:-1)
此解决方案可以设置默认页面,而不会受到Pager适配器类外部的干扰。
@Override
public Object instantiateItem(ViewGroup container, int position) {
View currentPage = null;
switch(position){
case 0:
currentPage = LayoutInflater.from(context).inflate(R.layout.page0, null)
break;
case 1:
currentPage = LayoutInflater.from(context).inflate(R.layout.page1, null)
///////////// This page will be default ////////////////////
((ViewPager)container).setCurrentItem(position);
////////////////////////////////////////////////////////////
break;
case 2:
currentPage = LayoutInflater.from(context).inflate(R.layout.page2, null)
break;
return currentPage;
}