我有一个关于Android支持库,片段的问题,并且作为一个具体的例子,ViewPager该类.我的目的是创建一个与Android Developer网站上提供的示例功能类似的应用程序(http://developer.android.com/training/animation/screen-slide.html或http://developer.android.com/ training/implementation-navigation/lateral.html).查看他们的代码,我注意到他们使用了android.support.v4.app库,我的研究是访问ViewPager该类的唯一方法.
在我的情况下,我对向后兼容性没兴趣.最低API级别为14(Ice Cream Sandwich),构建目标为4.2 Jelly Bean.在它最简单的形式中,我的应用程序与我在Android开发网站上链接的第二个演示完全一样 - 只需在三个选项卡之间滑动,每个选项卡中包含内容.
我读过的所有文章/帖子/答案似乎都非常支持v4支持库.现在,对于我,尽管是冗长的问题:
构建我的应用程序的最佳方法是什么 - 使用android.support.v4.app,从而使用SupportFragments,或使用提供的片段android.app- 以及为什么?
如果碎片来自android.app何方,最佳接近方式是ViewPagers什么?
如果SupportFragments最适合这项任务,我估计它们具有与另一项相同的功能 - 那么在内部拥有它们的目的是什么android.app?
希望有更清楚理解的人可以给我一些澄清,因为我很难过......
android android-fragments android-viewpager android-support-library
我正在使用Android中的v4兼容性ViewPager.我的FragmentActivity有一堆数据,可以在我的ViewPager中的不同页面上以不同的方式显示.到目前为止,我只有3个相同的ListFragment实例,但将来我将有3个不同的ListFragments实例.ViewPager位于垂直电话屏幕上,列表不是并排的.
现在,ListFragment上的一个按钮启动一个单独的整页活动(通过FragmentActivity),它返回并且FragmentActivity修改数据,保存数据,然后尝试更新其ViewPager中的所有视图.就在这里,我被卡住了.
public class ProgressMainActivity extends FragmentActivity
{
MyAdapter mAdapter;
ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState)
{
...
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.viewpager);
mPager.setAdapter(mAdapter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
updateFragments();
...
}
public void updateFragments()
{
//Attempt 1:
//mAdapter.notifyDataSetChanged();
//mPager.setAdapter(mAdapter);
//Attempt 2:
//HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
//fragment.updateDisplay();
}
public static class MyAdapter extends FragmentPagerAdapter implements
TitleProvider
{
int[] fragId = {0,0,0,0,0};
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override …Run Code Online (Sandbox Code Playgroud) android android-adapter android-fragments android-viewpager android-listfragment
我正在使用Jake的ViewPageIndicator,并希望像滑动图库一样显示图像.我可以开始的任何推荐链接.我已经实现了基本的viewpager,现在想要实现图像视图,如下所示

是否可以使用ViewPageIndicator实现?
当我尝试用一个替换Fragment另一个时,我遇到了一些问题ViewPager.
现在的情况
我有ViewPager3页,每一页都是Fragment.在第一页中,我有一个ListView内部ListFragment("FacturasFragment").当我点击该列表中的某个项目时,我使用onListItemClick方法来处理该事件.
我想要的是
ListFragment(包含发票列表)与另一个Fragment("DetallesFacturaFragment",包含发票的详细信息).Button,应该返回ListFragment.Fragment在第一个中显示.如果我在第一页上有"DetallesFacturaFragment"并滚动到第二页,当返回第一页时应继续显示"DetallesFacturaFragment".码
FragmentActivity
public class TabsFacturasActivity extends SherlockFragmentActivity {
private MyAdapter mAdapter;
private ViewPager mPager;
private PageIndicator mIndicator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_pager);
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
mPager.setAdapter(mAdapter);
mIndicator = (TitlePageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
private static class MyAdapter extends FragmentPagerAdapter {
private String[] titles = …Run Code Online (Sandbox Code Playgroud) 我正试图在两个片段之间进行翻转卡片动画,例如 - > 显示卡片翻转动画,方法是:
private void switchFragment(Fragment fragment) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
if ((fragment != null) && !(fragment.equals(currentFragment))) {
if (transactionByMenu) {
fragmentTransaction.setCustomAnimations(android.R.anim.fade_in,
android.R.anim.fade_out);
} else {
fragmentTransaction.setCustomAnimations(
R.animator.card_flip_right_in,
R.animator.card_flip_right_out);
}
Fragment nextFragment = fragment;
fragmentTransaction.hide(currentFragment);
fragmentTransaction.show(nextFragment);
currentFragment = nextFragment;
}
fragmentTransaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
交易if(transactionByMenu){...}有效,但没有else{...}
我检查我的库和东西,我目前的目标高于api 11但我仍然有这个错误消息:
05-22 11:32:34.706: E/AndroidRuntime(6801): FATAL EXCEPTION: main
05-22 11:32:34.706: E/AndroidRuntime(6801): java.lang.RuntimeException: Unknown animation name: objectAnimator
05-22 11:32:34.706: E/AndroidRuntime(6801): at android.view.animation.AnimationUtils.createAnimationFromXml(AnimationUtils.java:124)
05-22 11:32:34.706: E/AndroidRuntime(6801): …Run Code Online (Sandbox Code Playgroud) 我正在使用ViewPager和FragmentPagerAdapter来托管三个不同的片段
[Fragment1][Fragment2][Fragment3]
Run Code Online (Sandbox Code Playgroud)
我想要实现的是如果特定任务成功,用一个全新的片段Fragment4成功替换Fragment1.
我用的时候..
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.fragment1_layout_id, fragment4);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
..片段被精美地替换,片段4被显示而不是片段1.虽然只要我一直滑到Fragment3然后再回到Fragment4,Fragment1就会卷土重来.
然后,如果我使用..
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.remove(fragment1);
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
..Fragment1被删除,当我回来时Fragment4就在那里.所以这个解决方案的问题是我找不到立即显示Fragment4的方法,因为Fragment1被删除了,即使我尝试过:
transaction.add(fragment4);
transaction.show(fragment4);
Run Code Online (Sandbox Code Playgroud)
这就是我的FragmentPagerAdapter实现目前的样子,没有任何事务管理:
public static class PagerAdapter extends FragmentPagerAdapter {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public int getCount() {
return VIEW_COUNT;
}
@Override
public Fragment getItem(int position) {
Fragment fragment = null;
switch (position) {
case 0:
fragment = Fragment1.newInstance(context_);
break;
case 1:
fragment = Fragment2.newInstance(context_);
break;
case …Run Code Online (Sandbox Code Playgroud) Back Stack是否支持与Android中嵌套片段的交互?
如果是的话,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后台堆栈的事实.我希望它不是因为嵌套片段的问题,而是我做错了什么.
以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:
MyFragment fragment = new MyFragment();
FragmentTransaction ft = getChildFragmentManager().beginTransaction();
ft.setCustomAnimations(R.animator.slide_in_from_right, R.animator.slide_out_left, R.animator.slide_in_from_left, R.animator.slide_out_right);
ft.addToBackStack(null);
ft.replace(R.id.myFragmentHolder, fragment);
ft.commit();
Run Code Online (Sandbox Code Playgroud) 我用a ViewPager来显示一个片段FragmentActivity.ViewPager从附件中获取片段FragmentPagerAdapter.
mViewPager = (ViewPager) findViewById(R.id.view_pager);
mAdapter = new HomePagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mAdapter);
Run Code Online (Sandbox Code Playgroud)
假设ViewPager有3个片段来显示:Fragment1,Fragment2,Fragment3.Fragment1是网格片段并显示网格.Fragment2并Fragment3有自己的内容来展示.当使用在屏幕上滑动时,ViewPager将显示下一个片段 - Fragment2.等等.
我想要的是,当Fragment1点击网格中的一个项目(由...显示)时,Fragment1应该完全替换为其他一些片段,比如说Fragment4(这是不同的片段,连接的适配器不会返回).用户将Fragment4在ButtonBack点击之后(仅按钮旁边Fragment4)工作,Fragment1并且应该再次显示网格.同时ViewPager应该表现相同,即在滑动时,Fragment2将显示下一个片段(在我们的例子中).
所以我只想获得与示例相同的行为:http: //developer.android.com/training/basics/fragments/fragment-ui.html#Replace
那么,这有可能实现吗?如果是,那该怎么办?我非常感谢你的帮助.亚历克斯.PS抱歉我的英文:)
android replace android-fragments android-viewpager fragmentpageradapter
我在视图页面中有我的片段,但是我想在所选的选项卡上重新加载数据.我尝试在我PositionNone的GetItemPosition方法中返回FragmentPagerAdapter但是它不起作用.
我尝试添加notifyDataSetChanged();选项卡,但它会抛出nullpointer异常.我甚至尝试设置viewPager.setOffscreenPageLimit
我设法找到链接:
在ViewPager中替换Fragment
但它在java上.我已设法将大部分代码转换为c#,但却被卡在评论代码上.我不知道如何调用监听器并同时实例化该类?有很多类似的问题但不幸的是在Xamarin Android中没有一个.
我需要在xamarin android中执行此操作.任何帮助将不胜感激.
这是我的FragmentAdapter
public class TabsFragmentPagerAdapter : FragmentPagerAdapter
{
private readonly Android.Support.V4.App.Fragment[] fragments;
static readonly int NUM_ITEMS = 2;
private readonly Android.Support.V4.App.FragmentManager FragmentManager;
private Android.Support.V4.App.Fragment mFragmentAtPos0;
private readonly ICharSequence[] titles;
public TabsFragmentPagerAdapter(Android.Support.V4.App.FragmentManager fm, Android.Support.V4.App.Fragment[] fragments, ICharSequence[] titles) : base(fm)
{
this.fragments = fragments;
this.titles = titles;
}
public override int Count
{
get
{
return fragments.Length;
}
}
public override int GetItemPosition(Java.Lang.Object objectValue)
{
if …Run Code Online (Sandbox Code Playgroud) 我正在创建具有三个视图的ViewPager.在第一个视图是ListView,其中onItemClick用其中的WebView替换该片段的新片段.我有两个问题:添加'transaction.addToBackStack(null)'或'transaction.setCustomAnimations(...)'片段与WebView停止显示.没有这些线显示,但我不能按BACK按钮返回列表.
我正在基于该教程和这个问题创建代码.在那个问题中,使用了PagerAdapter,我正在使用FragmentPagerAdapter.此外,我不需要更换更多碎片.它只能是一次(从列表到webView和返回).
这是我的适配器代码:
public Fragment getItem( int position )
{
Fragment fragment = null;
switch ( position )
{
case 0: // news
if ( mFragmentAtPos0 == null )
{
mFragmentAtPos0 = new NewsListFragment( new FirstPageFragmentListener()
{
@Override
public void onSwitchToNewsFragment( String url, ViewGroup container )
{
FragmentTransaction transaction = fm.beginTransaction();
transaction.setCustomAnimations( R.anim.rotate_in, R.anim.rotate_out, R.anim.rotate_in, R.anim.rotate_out );
WebViewFragment wv = new WebViewFragment( url, context );
transaction.replace( container.getId(), wv );
transaction.commit();
mFragmentAtPos0 = wv;
notifyDataSetChanged();
}
} …Run Code Online (Sandbox Code Playgroud)