ViewPager使用xml文件进行视图

我想在ViewPager中使用三个先前创build的活动(使用PagerAdapter),以便用户可以通过它们水平滚动。 我跟着一个很好的教程。 问题在于他们使用TextView来演示的教程。 我已经完成活动(其中的布局是在XML文件中)。 我现在想在这个滑块中使用这些活动,但是看起来我只能使用Views。 我无法弄清楚如何改变类的代码(从“实现活动”到“扩展视图”),我可以在滑块中使用它。

我目前的代码如下所示:

public class HorizontalSliderBeispielActivity extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); cxt = this; awesomeAdapter = new AwesomePagerAdapter(); awesomePager = (ViewPager) findViewById(R.id.awesomepager); awesomePager.setAdapter(awesomeAdapter); } ... 

那么使用PageAdapter的内部类:

 ... private class AwesomePagerAdapter extends PagerAdapter { public Object instantiateItem(View collection, int position) { TextView tv = new TextView(cxt); tv.setText("Bonjour PAUG " + position); tv.setTextColor(Color.WHITE); tv.setTextSize(30); view_01 = new SubmitCheatInstructions(cxt); ((ViewPager) collection).addView(tv, 0); ((ViewPager) collection).addView(view_01 , 1); return tv; } } 

而不是那个TextView“电视”我想使用活动(即SubmitCheatInstructions)。 以前这个类看起来像:

 public class SubmitCheatInstructions implements Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.submitcheat_instructions); } 

}

但据我所知,我必须改变它

 public class SubmitCheatInstructions extends View { ???? } 

以便能够将其用于ViewPager。

我现在的问题是,我想从布局XML文件(submitcheat_instructions.xml)加载到该视图的布局,而不是在代码中做的一切。 我无法弄清楚我必须如何做到这一点。

谢谢你的帮助。

Solutions Collecting From Web of "ViewPager使用xml文件进行视图"

我跟着同一个教程,就像你我一开始无法做到这一点,但经过一些修改和反复试验,下面的代码就像一个魅力:

  /** * Create the page for the given position. The adapter is responsible * for adding the view to the container given here, although it only * must ensure this is done by the time it returns from * {@link #finishUpdate()}. * * @param container * The containing View in which the page will be shown. * @param position * The page position to be instantiated. * @return Returns an Object representing the new page. This does not * need to be a View, but can be some other container of the * page. */ @Override public Object instantiateItem(View collection, int position) { View v = new View(PatientView.this.getApplicationContext()); final LayoutInflater inflater = (LayoutInflater) PatientView.this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); switch (position) { case 0: v = inflater.inflate(R.layout.patientp1, (ViewGroup) null, false); ((Button) v.findViewById(R.id.pp1btnbck)).setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { finish(); } }); break; case 1: v = inflater.inflate(R.layout.patientp2, null, false ); break; default: TextView tv = new TextView(PatientView.this.context); tv.setText("Page " + position); tv.setTextColor(Color.WHITE); tv.setTextSize(30); v = tv; break; } ((ViewPager) collection).addView(v, 0); return v; } 

希望这会有所帮助,祝你好运Shereef Marzouk

感谢Shereef。 你的代码真的很有用。 我想把我的主要活动的数据传递给ViewPager中不同的布局。 我从你的代码中获得了设置onClickListenerbutton的想法。 这帮助我将主要活动中生成的数据传递给不同布局的不同TextView。

  public Object instantiateItem(View collection, int position) { View v = new View(CalcTimeActivity.this.getApplicationContext()); collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); final LayoutInflater inflater = (LayoutInflater) CalcTimeActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); switch (position) { case 0: v = inflater.inflate(R.layout.N, (ViewGroup) null, false); ((TextView) v.findViewById(R.id.tvA)).setText(strA); ((TextView) v.findViewById(R.id.tvB)).setText(strB); ((TextView) v.findViewById(R.id.tvC)).setText(strC); break; case 1: v = inflater.inflate(R.layout.M, null, false); break; case 2: v = inflater.inflate(R.layout.F, null, false); break; } ((ViewPager) collection).addView(v, 0); return v; }