Articles of android fragments

在先前失败的类java.lang.Class 上拒绝重新初始化:java.lang.NoClassDefFoundError

我在控制台中看到一个看起来像是错误的信息日志。 它是从“艺术”打印出来的,通常与记忆有关,但我需要帮助理解它的含义。 有问题的类是我的MapFragment类。 MapFragment是我创建的一个自定义类,它扩展了SupportMapFragment,以便我可以覆盖触摸事件。 此类是否导致此问题,我该如何解决? 这是我的MapFragment类 public class MapFragment extends SupportMapFragment { private TouchableWrapper mTouchView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View originalContentView = super.onCreateView(inflater, container, savedInstanceState); mTouchView = new TouchableWrapper(getActivity()); mTouchView.addView(originalContentView); return mTouchView; } @Override public View getView() { return mTouchView; } /** * MapOnTouchListener callback * * @param listener […]

Android应用程序基于单个活动,多个片段

在iOS中,我可以使用单个UIViewController编写整个应用程序,只需在UIView层次结构中添加整个应用程序。 这可以正常工作,因为当内存情况不好时,UIViewController会收到通知,并让开发人员进行一些手动内存管理/优化。 在Android中是否有相同的function? 我可以在一个活动中编写整个应用程序并在此基础上堆叠片段吗? 据我所知,这会对内存使用产生什么影响,这会绕过活动生命周期管理,整个堆栈片段会留在内存中 – 或者我错了?

FrameLayout.onMeasure()中的NullPointerException

编辑:我创建了一个Github项目,崩溃的方式与我的应用程序完全相同。 你可以在这里find它 编辑:因为我调试了这个并尝试了各种更改,我意识到我发布的原始代码并不真正相关,所以我删除了它: 我有一个Activity可以在3个不同的Fragment之间切换,当用户按下3个IconButton的一个时,我已经在自定义布局中插入ActionBar,比如在各种模式之间切换: 当我第一次启动应用程序(已卸载它)时,我默认为Globe模式。 Globe模式在ViewPager有几个片段,其中大多数片段是android.support.v4.app.ListFragment子类。 我在主Activity的onCreate方法中创建了所有8个选项卡。 这按预期工作,一切都正常加载。 当我进入“配置文件”模式(通过单击“脸部”图标按钮)时,我可以登录应用程序,并查看我的个人资料。 这也按预期工作,一切正常加载。 当我再次从Android Studio 推送APK时 ,由于我现在已登录(已保存的首选项),因此默认为“朋友提要”模式(两个人手牵着手)。 我可以将模式切换到配置文件,一切都按预期工作,但是当我切换到Globe模式时,它在Android代码中崩溃: 08-14 14:43:22.744 28804-29323/com.trover E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.trover, PID: 28804 java.lang.NullPointerException at android.widget.FrameLayout.onMeasure(FrameLayout.java:309) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at com.android.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:327) at android.view.View.measure(View.java:16497) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291) at android.view.View.measure(View.java:16497) at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1912) at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1109) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1291) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:996) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5600) […]

ViewPager中的片段按钮触发错误引用上的onClickListener

抱歉我的愚蠢标题,我将在下面清楚地描述: 情况 我有一个ViewPager里面有4个OnBoardingFragment 。 每个Fragment具有完全相同的布局,从同一个xml文件中inflated 。 这个布局包含一个我称之为btnNext的Button ,我为它设置了OnClickListener 。 我的PagerAdapter的函数getItem @Override public Fragment getItem(int position) { String title, description, button; int resource; boolean end = false; switch (position) { case 0: title = context.getString(R.string.on_boarding_title_1); description = context.getString(R.string.on_boarding_description_1); resource = R.drawable.on_boarding_bg_0; button = context.getString(R.string.on_boarding_button_1); break; case 1: title = context.getString(R.string.on_boarding_title_2); description = context.getString(R.string.on_boarding_description_2); resource = R.drawable.on_boarding_bg_1; […]

与所有活动共享NavigationView?

我们如何与所有活动分享Drawer ? 在lister: onNavigationItemSelected的setNavigationItemSelectedListener我们可以获取id并导航到它。 我要找的是这样的: private void initDrawerLayout() { drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); NavigationView navView = (NavigationView) findViewById(R.id.navigation_view); navView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(MenuItem menuItem) { Intent intent; int id = menuItem.getItemId(); switch(id) { case R.id.home: case R.id.drawer_home: // call activity instead of adding/replacing fragment return true; case R.id.drawer_gallery: // call activity instead of […]

在哪里调用getChildFragmentManager()?

问题 根据谷歌的文档: 您现在可以将片段嵌入片段中。 这对于您希望将动态和可重用的UI组件放入自身动态且可重用的UI组件的各种情况都很有用。 例如,如果使用ViewPager创建向左和向右滑动并占用大部分屏幕空间的片段,则现在可以将片段插入到每个片段页面中。 要嵌套片段,只需在要添加片段的片段上调用getChildFragmentManager()。 这将返回一个FragmentManager,您可以像通常从顶级活动那样使用它来创建片段事务。 例如,这里有一些代码可以在现有的Fragment类中添加一个片段: Fragment videoFragment = new VideoPlayerFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(R.id.video_fragment, videoFragment).commit(); 所以我(例如) TestFragment看起来像: public class TestFragment extends Fragment { private View mFragmentView; private FrameLayout mFrameLayout; public HistoryFragment() { super(); } @Override public View onCreateView(LayoutInflater pInflater, ViewGroup pViewGroup, Bundle pBundle) { mFragmentView = pInflater.inflate(R.layout.fragment_layout, pViewGroup, false); mFrameLayout = […]

显示图像的片段中的内存问题

我正在使用片段来显示图像/页面。我有一个包含所有片段的Activity(Main)。 package com.example.hscroll.demo; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.app.ListFragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.crittercism.app.Crittercism; import com.example.hscroll.customer.BitmapWeakReference; import com.example.hscroll.customer.PromotionalPriceListAdditionsDataAdaptor; import com.example.hscroll.customer.PromotionalPriceListDataAdaptor; import com.example.hscroll.library.imagezoom.ImageViewTouch; public class MainAct extends FragmentActivity{ private ImageViewTouch mImageView; MyPagerAdapter mPagerAdapter; ViewPager viewPager; static final int NUM_ITEMS = 58; […]

如何暂停/恢复片段

背景:我写了一个自定义容器,它能够容纳三个片段。 根据此容器的状态,只能看到两个或三个碎片。 为了通知片段其可见性已更改,我尝试了两个选项: 我用各自的值调用了Fragment.setUserVisibleHint()方法。 托管片段覆盖了此方法并进行了适当的反应。 这样就解决了。 我调用了FragmentTransaction.hide()和FragmentTransaction.show()方法来隐藏和显示片段。 托管片段覆盖Fragment.onHiddenChanged()并根据需要进行响应。 这也解决了。 我的问题是我对这些选项中的任何一个都不满意。 我想将不可见的片段置于标准的暂停状态。 这个选项的优点是我保持代码干净简单,因为我不需要覆盖任何特殊方法(如setUserVisibleHint()或onHiddenChanged() ),我可以处理onPause()和onResume()内的所有内容。已经实施。 问题:将片段置于暂停状态然后从该状态恢复的正确方法是什么? 更新:我也尝试了FragmentTransaction.detach() 。 这不是一个选项,因为它会破坏视图,这在我的情况下是不允许的。

平板电脑屏幕方向更改 – 没有find片段ID的视图

我在SO上查看了与我的问题有关的问题,但无法弄清问题是什么。 如果这是转贴,请耐心等待。 这是我正在寻找的: 手机的布局更改工作正常,因为它涉及片段内的相同视图。 问题是当我尝试在平板电脑中获得以下布局。 纵向模式下的activity_main.xml: 横向模式下的activity_main.xml: fragment_main.xml MainActivity – onCreate(): @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (Const.DEBUGGING_INT) Log.d(Const.DEBUG, “Activity – onCreate”); prefs = PreferenceManager.getDefaultSharedPreferences(this); if (Const.DEBUGGING) Log.d(Const.DEBUG, “Index = ” + index); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); toolbar = (Toolbar) findViewById(R.id.toolbar); spinner = (Spinner) toolbar.findViewById(R.id.spinner); mDrawerList = (ListView) findViewById(R.id.listview_drawer); setUpHeaderAndFooter(); setSupportActionBar(toolbar); getSupportActionBar().setHomeButtonEnabled(true); […]

CoordinatorLayout重叠

看看下面的布局。 你会看到,浮动按钮距离底部太远。 这是因为显示了工具栏和选项卡,并且ViewPager的高度错误。 所以我在某种程度上对layout_height做错了。 但是我该如何解决这个问题呢? 备注:ViewPager是主要内容,它在第二个选项卡中包含一个带有ListView和Google Map V2的片段。 这是布局XML: 这是第一个选项卡(列表)中片段的布局: 只想确认一下; 这不是FAB的问题。 看到这张照片。 这是一个类似的布局。 带有ToolBar和ViewPager的CoordinatorLayout,可以浏览所有细节条目(因此不需要选项卡)。 而且,内部视图似乎太长(与ToolBar的高度相同)。