小编key*_*fer的帖子

使用Fragments为Android中的每个选项卡分隔Back Stack

我正在尝试在Android应用中实现导航标签.由于不推荐使用TabActivity和ActivityGroup,我想使用Fragments来实现它.

我知道如何为每个选项卡设置一个片段,然后在单击选项卡时切换片段.但是,如何为每个选项卡分别设置一个后备堆栈?

例如,片段A和B将位于选项卡1下,片段C和D位于选项卡2下.启动应用程序时,将显示片段A并选择选项卡1.然后片段A可能被片段B替换.当选择标签2时,应显示片段C. 如果选择了选项卡1,则应再次显示片段B. 此时应该可以使用后退按钮显示片段A.

此外,重要的是在旋转设备时保持每个标签的状态.

BR马丁

tabs android android-fragments

155
推荐指数
5
解决办法
7万
查看次数

Android Fragment生命周期超过方向更改

使用兼容包以使用Fragments定位2.2.

重新编码活动以在应用程序中使用片段后,我无法获得方向更改/状态管理工作,因此我创建了一个带有单个FragmentActivity和单个片段的小型测试应用程序.

方向更改的日志很奇怪,多次调用片段OnCreateView.

我显然缺少一些东西 - 比如分离片段并重新连接它而不是创建一个新实例,但是我看不到任何可以指示我出错的文档.

请问有人能说清楚我在做错了吗.谢谢

方向更改后的日志如下.

Initial creation
12-04 11:57:15.808: D/FragmentTest.FragmentTestActivity(3143): onCreate
12-04 11:57:15.945: D/FragmentTest.FragmentOne(3143): OnCreateView
12-04 11:57:16.081: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null


Orientation Change 1
12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): onSaveInstanceState
12-04 11:57:39.031: D/FragmentTest.FragmentTestActivity(3143): onCreate
12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView
12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null
12-04 11:57:39.031: D/FragmentTest.FragmentOne(3143): OnCreateView
12-04 11:57:39.167: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState null


Orientation Change 2
12-04 11:58:32.162: D/FragmentTest.FragmentOne(3143): onSaveInstanceState
12-04 11:58:32.162: D/FragmentTest.FragmentOne(3143): onSaveInstanceState
12-04 11:58:32.361: D/FragmentTest.FragmentTestActivity(3143): onCreate
12-04 11:58:32.361: D/FragmentTest.FragmentOne(3143): OnCreateView
12-04 11:58:32.361: D/FragmentTest.FragmentOne(3143): OnCreateView->SavedInstanceState not null
12-04 11:58:32.361: …
Run Code Online (Sandbox Code Playgroud)

android orientation android-fragments android-activity

115
推荐指数
3
解决办法
9万
查看次数

在ViewPager中将一个片段替换为另一个片段

当我尝试用一​​个替换Fragment另一个时,我遇到了一些问题ViewPager.

现在的情况

我有ViewPager3页,每一页都是Fragment.在第一页中,我有一个ListView内部ListFragment("FacturasFragment").当我点击该列表中的某个项目时,我使用onListItemClick方法来处理该事件.

我想要的是

  • 单击列表项时,我想替换ListFragment(包含发票列表)与另一个Fragment("DetallesFacturaFragment",包含发票的详细信息).
  • 当我在"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)

android listview android-fragments android-viewpager

53
推荐指数
1
解决办法
5万
查看次数

Google Play Services V2库中的NoClassDefFoundError

在遵循官方教程后尝试使用Google Play Services V2库时出现以下异常.

java.lang.NoClassDefFoundError: com.google.android.gms.R$string
at com.google.android.gms.common.GooglePlayServicesUtil.b(Unknown Source)
at com.google.android.gms.common.GooglePlayServicesUtil.a(Unknown Source)
at com.google.android.gms.common.GooglePlayServicesUtil.getErrorDialog(Unknown Source)
Run Code Online (Sandbox Code Playgroud)

我哪里做错了?

android google-maps google-play-services

46
推荐指数
3
解决办法
4万
查看次数

仅在第二次导航到Fragment时导致java.IllegalStateException错误,无活动

我得到一个非常令人费解的错误,我不知道如何开始工作.

我有一个简单的应用程序,只有一个活动,视图是用Fragments实现的.其中一个片段里面有一个ViewPager; 所以我决定我想要使用v4支持库的getChildFragmentManager类.我还必须使用ActionBarSherlock,这会导致问题,因为它没有附带v4库的v11.

我通过用v11库替换ABS中的v4支持库来解决这个问题,所有编译好的东西都可以工作,包括ViewPager.

这是奇怪的部分:

第一次打开ViewPager的片段时,它可以正常工作; 但导航到的第二次,应用程序崩溃,给出了无用的堆栈跟踪.从调试开始,我发现问题出在getChildFragmentManager返回的FragmentManager上; 它会抛出No Activity错误.

有没有人知道是什么原因引起的?

我将发布您认为相关的代码.

谢谢你,大卫

android android-fragments android-viewpager actionbarsherlock android-support-library

35
推荐指数
2
解决办法
2万
查看次数

带有ChildFragmentManager的FragmentStatePagerAdapter - FragmentManagerImpl.getFragment导致NullPointerException

编辑2

我现在设法通过使用https://code.google.com/p/android/issues/detail?id=42601#c10中的技巧摆脱错误,这就是为什么我的上一次编辑被置于顶部的原因我的问题

但这导致了下一个错误:

java.lang.NullPointerException
at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569)
at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211)
at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281)
at android.view.View.dispatchRestoreInstanceState(View.java:12043)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2688)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694)
at android.view.View.restoreHierarchyState(View.java:12021)
at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:949)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4800)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

现在我不知道从哪里继续......

编辑0 - 第一个问题

我得到以下异常:

java.lang.IllegalStateException: No activity
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1091)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1086)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:1877)
at android.support.v4.app.Fragment.performActivityCreated(Fragment.java:1492)
at android.support.v4.app._HoloFragment.performActivityCreated(_HoloFragment.java:251)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1460) …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-support-library

26
推荐指数
2
解决办法
9761
查看次数

OnLoadFinished()调用两次

我想弄清楚我是否在装载机方面做错了.我正在使用支持库,我有一个片段,在onCreate()中调用initLoader()将其自身设置为LoaderCallbacks,但是在旋转时它会在onLoadFinished()中接收两次结果,一次调用init (并且它已经拥有数据),并且一旦FragmentActivity循环遍历onStart()中的所有Loaders并提供结果,因为它已经拥有数据.

如果我只调用init一次(在首次启动Fragment时),它不会将自己设置为Loader的回调,因此它根本不会接收对onLoadFinished的调用.好像onLoadFinished应该只被调用一次,因为onLoadFinished()可以完成一些昂贵的事情(例如清除列表适配器等),所以我只想弄清楚这是一个bug还是我是只是在错误的时间或其他地方调用init.

任何人都对此问题有任何见解?

android loader android-fragments android-loadermanager android-fragmentactivity

20
推荐指数
1
解决办法
7588
查看次数

如何在phpmyadmin表中删除多个主键?

我正在使用phpmyadmin.I创建了一个包含一个主键和5个字段的表.但是现在所有的整数字段都变成了主键.我尝试使用drop命令,但它没有帮助.如何从表中删除所有主键?

mysql sql phpmyadmin

18
推荐指数
2
解决办法
4万
查看次数

子类化SupportMapFragment会导致NullPointerException

我目前正在SupportMapFragment使用google-play-services库r3 实现我自己的子类.

我得到一个NullPointerException在图书馆的内部类中的一个,当我尝试我的片段添加到ActivityViewPager.这是相关的堆栈跟踪:

java.lang.NullPointerException
    at maps.y.p.onResume(Unknown Source)
    at com.google.android.gms.maps.internal.IMapFragmentDelegate$Stub.onTransact(IMapFragmentDelegate.java:115)
    at android.os.Binder.transact(Binder.java:310)
    at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onResume(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment$a.onResume(Unknown Source)
    at com.google.android.gms.internal.c$1.a(Unknown Source)
    at com.google.android.gms.internal.c.a(Unknown Source)
    at com.google.android.gms.internal.c.onResume(Unknown Source)
    at com.google.android.gms.maps.SupportMapFragment.onResume(Unknown Source)
    at android.support.v4.app.Fragment.performResume(Fragment.java:1503)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:947)
    at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:807)
    at android.support.v4.app.FragmentManagerImpl.startPendingDeferredFragments(FragmentManager.java:1112)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1461)
    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
Run Code Online (Sandbox Code Playgroud)

显然,此时内部地图为空.

有没有人遇到过这个问题而且有解决方案?

android android-maps google-play-services

14
推荐指数
1
解决办法
6216
查看次数

片段 - 我应该在onCreateView中重用视图,我该怎么做?

实际上,我总是在我的片段中重用我的视图,如下所示:

private View mView = null;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
    if (mView == null)
        mView = inflater.inflate(R.layout.view);
    return mView;
}
Run Code Online (Sandbox Code Playgroud)

这有效,有viewpager等.现在我开始在简单的活动中使用我的片段,如果,并且只有当我将片段添加到backstack时,这将因为java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

所以我的问题是:

  • 没关系,如果我检查父级视图,删除它并将其添加到新父级?
  • 或者我应该总是重新创建视图并且永远不会重复使用它?如果是,为什么?
  • 还有其他要点,重复使用视图会失败吗?

android view reusability android-fragments

13
推荐指数
2
解决办法
5580
查看次数