在viewpager上显示一个片段
我有一个ViewPager
3滑动fragments
。每个fragment
都有listview
,其中包含一些图像。当单击listview
中的某个图像时,我试图在viewpager上显示一个新的fragment
(类似于活动),并且当按下后退按钮时还能够导航回viewpager。在viewpager上显示一个片段
我对listview
的onClick代码是片段里面是如下(用于测试,我对整个listview
而不是图像使用onClick
)
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Log.d(TAG,"Clicked");
ItemDetailFragment fragment = ItemDetailFragment.newInstance("ab","cd");
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.containerr,fragment);
transaction.addToBackStack(null);
transaction.commit();
}
});
日志语句打印出精品,但片段不显示。
这里是我的活动它有viewpager
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:theme="@android:style/Theme.WithActionBar">
<com.firstapp.myapplication.CustomViews.SlidingTabLayout
android:id="@+id/sliding_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<android.support.v4.view.ViewPager
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/viewPager">
</android.support.v4.view.ViewPager>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/containerr">
</FrameLayout>
</LinearLayout>
请帮助。
另外,在android docs的例子中,导致片段事务的片段中的任何交互都首先传递给处理添加或替换新片段的父活动。我正在处理片段本身。哪一种方法是正确的,两种方法有什么区别?
编辑:我需要在viewPager上添加片段而不是它。这就像在点击viewpager片段内的一个元素时出现一个新的屏幕。
谢谢!
我解决了它通过添加viewpager
在fragment
(而不是直接在我的activity
本身)。
我的活动现在是
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
,我现在在移动之前的活动布局(在问题中提到)到ViewPagerFragment
我的活动的onCreate
我做
ViewPagerFragment viewPagerFragment = new ViewPagerFragment();
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, viewPagerFragment)
.commit();
和为了在viewpager上点击viewpager片段中的一个项目来显示一个新的fragment
,我做了
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mListener.onFragmentInteraction(null);
}
});
侦听是在父活动实现的接口如下
@Override
public void onFragmentInteraction(Uri uri) {
ItemDetailFragment itemDetailFragment = ItemDetailFragment.newInstance("ab","cd");
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container,itemDetailFragment)
.addToBackStack(null)
.commit();
}
我经由监听器接口实现这一点,因为每docs
所有作为片段对片段通信通过相关的活动完成。两个碎片不应该直接通信。
它现在可以工作了! :D
可以请你分享xml文件。如何将viewpager添加到片段? – lacs 2016-09-26 13:28:48
初始化您的片段Activity类并将其添加到viewpager像下面
List<Fragment> fragments = getFragments();
pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments);
pager = (ViewPager) findViewById(R.id.viewpager);
pager.setAdapter(pageAdapter);
片段加入您的viewpager
private List<Fragment> getFragments() {
List<Fragment> fList = new ArrayList<Fragment>();
fList.add(Fragment1.newInstance());
fList.add(Fragment2.newInstance());
fList.add(Fragment3.newInstance());
return fList;
}
/********************** Fragment Page adapter *************************/
private class MyPageAdapter extends FragmentPagerAdapter {
private List<Fragment> fragments;
public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getCount() {
return this.fragments.size();
}
}
,打造您的片段类和处理内部的列表视图那些类
如果您需要“over viewpager”,您可以做的最好的事情是,开始一个新的活动并将ItemDetail片段附加到它中。这是推荐的方式,而不是将附加片段添加到viewpager中。 – 2015-04-04 05:55:12
嗨!谢谢回复。我不是试图将'fragment'附加到'viewpager',而是附加到具有视图寻呼机的父活动。 – aandis 2015-04-04 05:59:01
你的意思是ItemDetail片段是3个滑动片段之一? – 2015-04-04 06:00:12