【发布时间】:2014-11-25 07:05:21
【问题描述】:
我有一个由三个按钮、一个片段和一个 ViewPager 组成的视图。如果按 button1,则应显示片段一。如果按下按钮二,则会显示片段二。如果按下按钮三,则会显示片段三。以及从片段一到片段拖曳和片段二到片段三的滑动。问题是如果我执行单独的片段和 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>
【问题讨论】:
-
这个问题你解决了吗?
标签: java android xml android-fragments