标签: android-fragmentactivity

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
查看次数

片段活动onSaveInstanceState未被调用

我已经看到了一些类似的问题,关于onSaveInstanceState没有被称为Fragments,但在我的情况下Fragment工作正常,这是主要FragmentActivity的麻烦.

相关代码看起来很简单:

public class MyFActivity extends FragmentActivity implements ActionBar.TabListener { 
    String[] allValues; // data to save

    @Override
    protected void onSaveInstanceState (Bundle outState) {
        Log.d("putting it!", allValues.toString());
        outState.putStringArray("allValues", allValues);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (savedInstanceState != null) {
            allValues = savedInstanceState.getStringArray("allValues");
            Log.d("getting it!", allValues.toString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

暂停活动时(使用后退按钮),onSaveInstanceState永远不会调用,因此,在恢复应用程序时savedInstanceState始终nullonCreate方法内.我尝试添加这样的块:

@Override
public void onPause() {
    super.onPause();
    onSaveInstanceState(new Bundle());      
}
Run Code Online (Sandbox Code Playgroud)

这是在/sf/answers/993664171/中建议的,但是当 …

android android-fragmentactivity

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

onResume()和onResumeFragments()之间的区别

FragmentActivity.onResume() 的Javadoc:

将onResume()发送到片段.请注意,为了更好地与平台的旧版本进行互操作,在此调用时,不会恢复附加到活动的片段.这意味着在某些情况下,仍可以保存先前的状态,不允许修改状态的片段事务.要正确地与处于正确状态的片段进行交互,您应该覆盖onResumeFragments().

FragmentActivity.onResumeFragments() 的Javadoc:

这是onResume()的片段定向版本,您可以覆盖它以在其片段恢复的同一点执行Activity中的操作.一定要经常打电话给超级班级.

以上是否意味着平台保证:

  • 在执行和执行时,片段永远不会被恢复(它们onResume()未被调用)FragmentActivity.onResume()
  • 片段总是onResume()在执行时恢复(被调用)FragmentActivity.onResumeFragments()

如果没有,开发商如何正确使用并对上述内容保持警惕?

android android-lifecycle android-fragments android-fragmentactivity

19
推荐指数
1
解决办法
9772
查看次数

使用FragmentActivity的getSupportActionBar

我在一个项目上使用片段活动,但似乎v4支持FragmentActivity没有getSupportActionBar()方法,我需要使用支持一个才能使用android.support.v7.app.ActionBar

android android-actionbar android-fragmentactivity android-support-library

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

全局加载器(LoaderManager),用于在多个活动/片段中重用

我想要实现的目标:

我有两个不同的片段.我希望他们两个以两种形式(在列表和地图上)显示相同的数据.我希望他们共享一个Loader(AsyncTaskLoader特别是).一切正常,但装载机不会重复使用.创建另一个并且数据加载两次.

我所做的:

Fragment我使用的LoaderManager lm = getActivity().getSupportLoaderManager(); 两个中我实现LoaderCallbacks<ArrayList<Item>>了所需的方法.在我用两个lm.initLoader(0, args, this);.

但是当我输出lm.toString()它时,看起来这些是两个不同的装载机.并且数据被下载两次.

如何从不同的Activity/Fragment重新连接到同一个Loader,而不是从它开始的那个?

应该是可能的,因为无论如何都要将上下文附加到Loader onCreate(),例如配置更改.

android android-fragments android-3.0-honeycomb android-loadermanager android-fragmentactivity

16
推荐指数
1
解决办法
7514
查看次数

Android - IllegalStateException:map的大小为零

我是一个新手android程序员.

让我给出一些背景信息.
我的项目使用ActionBarSherlock.

  1. 我有一个包含两个片段的活动(Activity1) - 一个SherlockListFragment和一个包含谷歌地图MapView(本质上是一个MapFragment)的SherlockFragment.
  2. 搜索结果显示在列表片段和地图片段中,操作栏选项按钮切换列表和地图之间当前显示的片段.
  3. 选择列表中的项目或搜索结果的地图会启动一个新活动(Activity2),显示所选项目的数据.
  4. 这个新活动有一个类似的流程:一个显示数据的片段,一个显示位置的地图片段 - 由一个操作栏选项按钮切换.

问题:

  1. 我可以在搜索结果(Activity1)列表片段中选择一个列表项,并且成功启动详细信息页面(Activity2).
  2. 当我从(Activity1)中的地图覆盖中选择一个地图项时,应用程序崩溃,我得到如下所示的堆栈跟踪.

到目前为止我尝试过的:

  1. 我搜索过"地图零大小"和相同搜索的许多排列,包括"android"和"illegalstateexception"以及堆栈跟踪的各种行,我检查了甚至与android没有关系但与之相关的结果谷歌地图apis一般,我没有找到任何地方或任何人遇到此错误,除了在这个网址http://www.androidpub.com/1551654但我不知道韩国,谷歌翻译没什么帮助.
  2. 我试图找到源代码的一些片段来看看发生了什么,但事实并非如此.
  3. 我在我的代码中添加了日志以尝试确定异常发生的位置,而我能够找到的所有内容都发生在(Activity2)细节活动开始后的某个时间,也就是在调用onCreate()之后.并且详细信息片段和地图片段都已在onCreate()中成功实例化了booth.我无法在我的代码中找到一个位置来捕获异常.因此,对于我能看到的所有内容,此异常似乎完全是谷歌MapView代码中的一个错误,但如果我在任何地方犯了错误,请显示它.我愿意向任何可以告诉我这里发生了什么的人提供帮助.

所以,总结一下.从具有当前显示的mapview的活动(Activity1)转到另一个也包含另一个mapview的片段的活动(Activity2)时发生崩溃.但是,当从(Activity1)中显示的列表片段转到包含另一个映射片段的其他活动(Activity2)时,不会发生崩溃.

我希望这是足够的细节.如果您有任何疑问,请发表评论.

D/memalloc(  121): /dev/pmem: Allocated buffer base:0x4215c000 size:2088960 offset:4177920 fd:66
D/memalloc(30944): /dev/pmem: Mapped buffer base:0x5b4f5000 size:6266880 offset:4177920 fd:164
D/AndroidRuntime(30944): Shutting down VM
W/dalvikvm(30944): threadid=1: thread exiting with uncaught exception (group=0x40aaa228)
E/AndroidRuntime(30944): FATAL EXCEPTION: main
E/AndroidRuntime(30944): java.lang.IllegalStateException: Map has zero size
E/AndroidRuntime(30944):    at android_maps_conflict_avoidance.com.google.googlenav.map.Map.drawMap(Map.java:818)
E/AndroidRuntime(30944):    at com.google.android.maps.MapView.drawMap(MapView.java:1091)
E/AndroidRuntime(30944):    at com.google.android.maps.MapView.onDraw(MapView.java:522)
E/AndroidRuntime(30944):    at android.view.View.draw(View.java:11071)
E/AndroidRuntime(30944):    at android.view.View.getDisplayList(View.java:10462)
E/AndroidRuntime(30944):    at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2605)
E/AndroidRuntime(30944): …
Run Code Online (Sandbox Code Playgroud)

android google-maps android-fragments android-mapview android-fragmentactivity

16
推荐指数
1
解决办法
2169
查看次数

在Android中保存MapFragment(Maps v2)状态

我正在使用新的GoogleMaps API(v2)并且片段存在一些问题.我的应用程序(Map,List)中有两个片段,用户可以在它们之间切换.到目前为止使用此代码正常工作:

if (itemPosition == 0) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragmentpos, myMapFragment).commit();
    } else if (itemPosition == 1) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragmentpos, myListFragment).commit();
}......
Run Code Online (Sandbox Code Playgroud)

当我使用地图时,切换到列表片段,然后返回到地图片段,不保存地图的最后位置.这不是我想要的,我希望地图处于保存状态,因为我"离开"它..我怎么能完成这个?我试图保存相机的位置

public void onSaveInstanceState(Bundle outState){
   outState.putDouble("LAT", mMap.getCameraPosition().target.latitude);
   outState.putDouble("LON", mMap.getCameraPosition().target.longitude);
   outState.putFloat("BEAR", mMap.getCameraPosition().bearing);
   ...
Run Code Online (Sandbox Code Playgroud)

}

并在onCreateView()中恢复它,但Bundle始终为null.如果我替换片段,则不会调用onSaveInstanceState.

那么如何保存地图的状态呢?

android android-maps android-fragments android-fragmentactivity

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

从片段内部调用活动方法

我试图从Fragment屏幕调用一个方法中的方法.

我有一个名为myMethod()的方法,它位于一个名为MyActivity的活动中; 我有一个名为Screen1Fragment的片段.

我想从Screen1Fragment中调用MyActivity.myMethod(),但我不知道该怎么做.

以前Screen1Fragment是一个活动,因此我扩展了MyActivity,以便我可以直接调用myMethod().但我不得不将活动更改为片段以滑动标签使用.

提前致谢.

android android-fragments android-activity android-fragmentactivity

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

Android片段中的问题:仍然点击上一个片段

我已经开发了一个应用程序,它有导航抽屉和抽屉内的许多片段,所以当我在片段中打开片段时我遇到问题,在一个片段中我有列表视图当用户点击listview项目时他们获得与列表项相关的数据所以我面临问题它仍然点击不可见的列表但单击

Fragment的布局

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/layoutDrawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:clickable="true"
        android:background="@drawable/backgroung"
        android:id="@+id/content_frame"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"></FrameLayout>

    <LinearLayout
        android:id="@+id/linearDrawer"
        android:layout_width="@dimen/dp260"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@color/white"
        android:layout_gravity="start">

        <RelativeLayout
            android:id="@+id/userDrawer"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:layout_margin="@dimen/dp10">
Run Code Online (Sandbox Code Playgroud)

开放片段的代码

Fragment fragment = new FragmentContactDetails();
            FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
            transaction.add(((ViewGroup) getView().getParent()).getId(), fragment);
            transaction.addToBackStack(null);
            transaction.commit();

            Bundle args = new Bundle();
            int index = adapter.arrayList.indexOf(adapter.propertyList.get(position));

            args.putInt(Constant.POSITION, index);
            Toast.makeText(getActivity(), "" + index + "----" + adapter.propertyList.get(position).getName(), Toast.LENGTH_LONG).show();
            fragment.setArguments(args);
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-fragmentactivity

16
推荐指数
1
解决办法
7865
查看次数

从Fragment调用DialogFragment(不是FragmentActivity)?

这是我的问题:我确实有一个FragmentActivity,它包含一个片段列表(在它们之间导航的方法)在其中一个片段中我需要调用一个DialogFragment来显示该片段中包含的图片的"缩放".

但似乎你不能直接从Fragment调用DialogFragment.

有没有办法让FragmentActivity获得一些"回调",以便在片段上显示DialogFragment.

或者只是一个"故障"直接从片段中调用它.

如果是这样的话,你是否知道一个关于它的好教程?

最好的祝福,

艾莉佩奇

android android-fragments android-fragmentactivity

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