我想弄清楚我是否在装载机方面做错了.我正在使用支持库,我有一个片段,在onCreate()中调用initLoader()将其自身设置为LoaderCallbacks,但是在旋转时它会在onLoadFinished()中接收两次结果,一次调用init (并且它已经拥有数据),并且一旦FragmentActivity循环遍历onStart()中的所有Loaders并提供结果,因为它已经拥有数据.
如果我只调用init一次(在首次启动Fragment时),它不会将自己设置为Loader的回调,因此它根本不会接收对onLoadFinished的调用.好像onLoadFinished应该只被调用一次,因为onLoadFinished()可以完成一些昂贵的事情(例如清除列表适配器等),所以我只想弄清楚这是一个bug还是我是只是在错误的时间或其他地方调用init.
任何人都对此问题有任何见解?
android loader android-fragments android-loadermanager android-fragmentactivity
我已经看到了一些类似的问题,关于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始终null在onCreate方法内.我尝试添加这样的块:
@Override
public void onPause() {
super.onPause();
onSaveInstanceState(new Bundle());
}
Run Code Online (Sandbox Code Playgroud)
这是在/sf/answers/993664171/中建议的,但是当 …
FragmentActivity.onResume() 的Javadoc:
将onResume()发送到片段.请注意,为了更好地与平台的旧版本进行互操作,在此调用时,不会恢复附加到活动的片段.这意味着在某些情况下,仍可以保存先前的状态,不允许修改状态的片段事务.要正确地与处于正确状态的片段进行交互,您应该覆盖onResumeFragments().
FragmentActivity.onResumeFragments() 的Javadoc:
这是onResume()的片段定向版本,您可以覆盖它以在其片段恢复的同一点执行Activity中的操作.一定要经常打电话给超级班级.
以上是否意味着平台保证:
onResume()未被调用)FragmentActivity.onResume()onResume()在执行时恢复(被调用)FragmentActivity.onResumeFragments()?如果没有,开发商如何正确使用并对上述内容保持警惕?
android android-lifecycle android-fragments android-fragmentactivity
我在一个项目上使用片段活动,但似乎v4支持FragmentActivity没有getSupportActionBar()方法,我需要使用支持一个才能使用android.support.v7.app.ActionBar
android android-actionbar android-fragmentactivity android-support-library
我想要实现的目标:
我有两个不同的片段.我希望他们两个以两种形式(在列表和地图上)显示相同的数据.我希望他们共享一个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
我是一个新手android程序员.
让我给出一些背景信息.
我的项目使用ActionBarSherlock.
问题:
到目前为止我尝试过的:
所以,总结一下.从具有当前显示的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
我正在使用新的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
我试图从Fragment屏幕调用一个方法中的方法.
我有一个名为myMethod()的方法,它位于一个名为MyActivity的活动中; 我有一个名为Screen1Fragment的片段.
我想从Screen1Fragment中调用MyActivity.myMethod(),但我不知道该怎么做.
以前Screen1Fragment是一个活动,因此我扩展了MyActivity,以便我可以直接调用myMethod().但我不得不将活动更改为片段以滑动标签使用.
提前致谢.
android android-fragments android-activity android-fragmentactivity
我已经开发了一个应用程序,它有导航抽屉和抽屉内的许多片段,所以当我在片段中打开片段时我遇到问题,在一个片段中我有列表视图当用户点击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) 这是我的问题:我确实有一个FragmentActivity,它包含一个片段列表(在它们之间导航的方法)在其中一个片段中我需要调用一个DialogFragment来显示该片段中包含的图片的"缩放".
但似乎你不能直接从Fragment调用DialogFragment.
有没有办法让FragmentActivity获得一些"回调",以便在片段上显示DialogFragment.
或者只是一个"故障"直接从片段中调用它.
如果是这样的话,你是否知道一个关于它的好教程?
最好的祝福,
艾莉佩奇