Articles of android fragments

不要剪辑ViewPager页面

我不能让我的ViewPager不剪切其页面内容。 我目前正在我的应用程序中使用带有FragmentStatePagerAdapter ViewPager 。 我有3页,每页都显示不同的片段。 一切正常,但现在我希望能够在我的页面边界之外绘制,如下图所示: 我在我的所有视图中将clipChildren和clipToPadding设置为false ,以及需要在其边界之外绘制的视图,但这是我得到的:我的视图根据页面边界被剪切。 一些额外的信息:为了解决这个问题,我使用了hierarchyviewer来检查我的视图层次结构,看看是否有一些“幕后”视图可能有剪切行为。 和bingo:我的每个片段的根视图都添加在NoSaveStateFrameLayout 。 我怀疑这个家伙要夹住孩子…… 你认为我的最后一个假设是否正确? 如何获取未剪辑的页面?

AppCompat和Fragment无法正常工作

02-19 11:49:17.369: E/AndroidRuntime(4209): java.lang.NoClassDefFoundError: com.slidingmenus.fragments.HomeFragment 02-19 11:49:17.369: E/AndroidRuntime(4209): at com.slidingmenus.MainActivity.displayCategoryView(MainActivity.java:242) 02-19 11:49:17.369: E/AndroidRuntime(4209): at com.slidingmenus.MainActivity.onCreate(MainActivity.java:121) 尝试堆栈溢出中建议的每个步骤,但他们没有帮助。 它在4.0+中没有错误,但在2.3.x设备中它给出了java.lang.NoClassDefFoundError line 242: fragment = new HomeFragment(); 我从片段导入的是: import android.app.Fragment; import android.app.FragmentManager; 我正在使用: FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit(); 这是我的家庭片段: import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; public class HomeFragment extends Fragment { public HomeFragment(){} @Override […]

在TabLayout中使用多个webview来处理内存问题的逻辑

我在Tablayout中有近30个webview。 一切正常,但我的应用程序消耗大量内存,并将因内存问题关闭。 这是我在日志中得到的 04-05 21:00:09.458 19720-19801/com.example.choman.webview A/chromium: [FATAL:memory.cc(19)] Out of memory. size=16777216 这是我的java文件。 基本上所有剩余的29个片段包含相同的代码,只是更改了URL。 我不知道如何处理这个问题。 public class stackOverflow extends Fragment { private WebView webView; private ProgressBar progressBar1; private SwipeRefreshLayout mSwipeRefreshLayout1; public stackOverflow() { // Required empty public constructor } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this […]

Android onBackStackChanged()未调用

我有一个Activity如下面的代码: public class AuthenticatedMainActivity extends Activity implements FragmentManager.OnBackStackChangedListener{ @Override protected void onCreate(Bundle savedInstanceState) { …………. FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().add(R.id.frame_container,fragment, “First”).addToBackStack(null).commit(); } private void switchFragment(Fragment fragment){ FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, fragment).addToBackStack(“Tag”).commit(); } @Override public void onBackStackChanged() { System.out.println(“====================================================changeeeeeeeeeeeeeeeeeeeeeeeeee”); } } 但是,在使用onBackStackChanged()方法成功替换片段之后,甚至永远不会调用onBackStackChanged()方法。

方向改变后片段无法正常工作

我遇到Fragments和方向改变的问题。 我有一个具有MainActivity的应用程序,它通过选项卡式操作栏处理切换Fragments 。 以下是选项卡式操作栏的代码以及选择选项卡的时间。 private class MyTabListener implements ActionBar.TabListener { private android.support.v4.app.Fragment mFragment; private final Activity mActivity; private final String mTag; private final Class mClass; public MyTabListener(SherlockFragmentActivity activity, String tag, Class clz) { mActivity = activity; mTag = tag; mClass = clz; } @Override public void onTabSelected(Tab tab, android.support.v4.app.FragmentTransaction ft) { if (mFragment == null){ […]

在Viewpager中映射v2 SupportMapFragment

背景 我成功地将新地图api v2.0添加到ViewPager并且地图加载正常。 我正在使用FragmentViewPager。 我遇到了麻烦,但是当我尝试添加标记时因为我无法获取Fragment by标签,因为我使用的ViewPager来自兼容性库并在XML中定义,这会“隐藏”我的标签。 问题 如何将带有标记SupportMapFragment的新Map v2加载到使用FragmentPagerAdapter的ViewPager中。 我的尝试 因此,我认为可以通过将SupportMapFragment扩展为执行以下操作的新类来创建一个优雅的解决方案: 添加一个采用GoogleMapOptions和List的新构造函数。 这有效地调用了只接受GoogleMapsOptions的现有构造函数,然后将我的标记列表存储在新类的私有属性中。 覆盖GetMap() – 检查它是否为null,如果它没有将标记添加到我们之前加载到地图上的地图,最后返回它。 我的想法是,我的扩展可以高度重用,并抽象任何与一个地方相关的地图,并允许我的活动通过newInstance(myGoogleMapOptions, myMarkers)创建新的MapFragment。 好的问题。 第1部分似乎工作正常,但在调试过程中,我无法调用重写的GetMap()方法。 事实上,我已经尝试重写碎片所具有的大多数常用方法,并且没有一个被调用。 是否有一些奇怪的事情发生在SupportMapFragmemt上,我试图find它的来源无济于事地检查自己。 更新 我意识到为什么我没有得到被覆盖的方法。 这是因为我返回的是标准的SupportMapFragment而不是MyMapFragment 。 也就是说我不能从静态方法调用super,并且我不能毫无例外地从基类转换为派生类。 编辑这是课程 public class MyMapFragment extends SupportMapFragment { private static List mMarkers; public static SupportMapFragment newInstance(GoogleMapOptions options, List markers) { SupportMapFragment fragment = newInstance(options); mMarkers = markers; return fragment; […]

Android致命错误 – 在onSaveInstanceState之后无法执行此操作

我在Android中请求权限后尝试执行片段事务 – 但应用程序不断崩溃。 如何更改此代码以避免这种情况? 任何帮助表示赞赏。 在发送电子邮件之前检查许可: private void emailShare() { if (mayRequestContacts()) { emailShareImpl(); } } 检查许可: private boolean mayRequestContacts() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { return true; } requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); return false; } 允许检查结果: @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { if (requestCode == REQUEST_READ_CONTACTS) { if (grantResults.length == 1 […]

DialogFragment上的commitAllowingStateLoss

我在显示DialogFragment IllegalStateException : java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState 我知道它为什么会发生但我想通过重写DialogFragment show函数来显示对话框的commitAllowingStateLoss: public void show(FragmentManager manager, String tag) { mDismissed = false; mShownByMe = true; FragmentTransaction ft = manager.beginTransaction(); ft.add(this, tag); ft.commit(); //replace it by commitAllowingStateLoss } 但是我没有访问mDismissed和mShownByMevariables,我如何访问这些variables来修改它们,就像它的父级一样。

带有LoaderManager兼容包的ExpandableListFragment

我想让我的ExpandableListActivity与Honeycomb兼容。 我想知道为什么兼容包没有ExpandableListFragment。 有没有办法使ExpandableListView与普通的Fragment类一起工作? 如何使用LoaderManager加载游标?

Android片段在方向更改时重新创建

我正在开发一个基本上有ActionBar的应用程序。 当我的应用程序启动时,Activity会创建片段并将它们附加到每个选项卡,因此当我切换时,我会得到不同的视图。 当我尝试旋转设备时出现问题。 经过一番努力,我注意到Android会自动重新创建以前添加的片段,如下所示: SummaryFragment.onCreate(Bundle) line: 79 FragmentManagerImpl.moveToState(Fragment, int, int, int) line: 795 FragmentManagerImpl.moveToState(int, int, int, boolean) line: 1032 FragmentManagerImpl.moveToState(int, boolean) line: 1014 FragmentManagerImpl.dispatchCreate() line: 1761 DashboardActivity(Activity).onCreate(Bundle) line: 864 … 然后像往常一样重新创建片段。 因此,我希望能够正常工作的“真实”片段和他们“隐藏”的Android创建的片段会让我的应用崩溃。 我怎样才能避免这种行为? 我已经尝试在SummaryFragment中调用setRetainInstance(false)。 谢谢