我有一个由三个按钮,一个片段和一个ViewPager组成的视图。如果按下按钮1,则应显示片段1。如果按下按钮2,则会显示片段2。如果按下按钮三,则显示片段三。以及滑动应该发生从第一个片段到第二个片段并且第二个片段到第三个片段。问题是,如果我执行单独的片段和ViewPager,它会运行。但我希望在单一布局。错误显示在此行中:fragmentTransaction.replace(R.id.fragment_place,fr);并且错误是:类型FragmentTransaction中的方法replace(int,Fragment)不适用于参数(int,Fragment); 所以请有人告诉我如何解决这个问题。我同时使用了片段和ViewPager。我可以在单一布局中使用两者吗?片段通过滑动以及按钮单击从一个片段移动到另一个片段
我该如何解决这个问题,所以都会发生像滑动以及按钮点击片段移动? MainActivity.java类
public class MainActivity extends FragmentActivity {
private PageAdapter mPageAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewpages_layout);
initialingpaging();
}
private void initialingpaging() {
List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this, Fragment1.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment2.class.getName()));
fragments.add(Fragment.instantiate(this, Fragment3.class.getName()));
mPageAdapter = new PageAdapter(this.getSupportFragmentManager(), fragments);
ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
pager.setAdapter(mPageAdapter);
}
public void selectFrag(View view) {
Fragment fr;
switch (view.getId()) {
case R.id.button1:
fr = new Fragment1();
break;
case R.id.button2:
fr = new Fragment2();
break;
case R.id.button3:
fr = new Fragment3();
break;
default:
break;
}
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.commit();
}
}
// PageAdapter.java类
public final class PageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public PageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
// TODO Auto-generated constructor stub
this.fragments = fragments;
}
@Override
public Fragment getItem(int arg0) {
return this.fragments.get(arg0);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
//Fragment1.java,Fragment2.java和Fragment3.java类是如下面的代码:
public class Fragment3 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(container == null) {
return null;
}
return (LinearLayout) inflater.inflate(R.layout.fragment3_layout,container,false);
}
}
//fragment1_layout.xml,fragment2_layout.xml和fragment3_layout.xml类似于下面的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FF0000"
android:orientation="vertical" >
</LinearLayout>
//viewpages_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="110dp"
android:layout_height="wrap_content"
android:onClick="selectFrag"
android:text="Fragment 1" />
<Button
android:id="@+id/button3"
android:layout_width="110dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:onClick="selectFrag"
android:text="Fragment 3" />
<Button
android:id="@+id/button2"
android:layout_width="110dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:onClick="selectFrag"
android:text="Fragment 2" />
<android.support.v4.view.ViewPager
android:id="@+android:id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginTop="100dp"/>
<fragment
android:id="@+id/fragment_place"
android:name="com.example.viewpageexample1.Fragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="70dp" />
</RelativeLayout>
你是否得到了修正? – vilpe89 2015-01-08 15:02:08