Tag: android fragments

如何开始创建类似于Google Play音乐的交互式转换

我正在创建一个视图,在用户与之交互时滑出。 我想制作一个小型的酒吧,当用户向上拖动它时,它会在他们的手指下动画,并随着它们一起移动,直到最终开启全景。 仔细观察Google Play音乐,我猜测他们正在使用片段,并且有两个滚动视图,一个滚动整个屏幕,但触摸区域只定义为底部的栏,并以占位符视图滚动看起来像真正的玩家,然后在最后一秒切换片段。 这个,或者根本不是片段,只是在编程的时候,视图是100%滚动的,并且改变了按钮的位置 有任何想法吗? 我找不到任何代码示例。 Kotlin或Java

滚动时,片段内容隐藏在BottomNavigationView后面

我已经深入研究了这一点,并且在做什么的时候感到不知所措 – 我在活动中的BottomNavigation栏截取了一个片段中的一些内容,我不知道该怎么做。 我尝试添加app:layout_behavior="@string/appbar_scrolling_view_behavior"到NestedScrollView但内容的底部(位置的名称)仍然被切断 – 这可能是一个简单的解决办法,但我不能想办法。 我的主要活动和“家”片段的XML如下所示: activity_home.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/home_screen" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/app_bar" /> <FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"/> <android.support.design.widget.BottomNavigationView android:id="@+id/bottom_nav" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="start" android:background="@color/navbarBackground" app:menu="@menu/bottom_nav_menu" /> </LinearLayout> home_fragment.xml <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/home_fragment" android:layout_width="match_parent" android:layout_height="match_parent" tools:layout_editor_absoluteX="0dp" tools:layout_editor_absoluteY="0dp"> <ImageView android:id="@+id/tokyo_placeholder" android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:scaleType="fitStart" app:layout_constraintLeft_toLeftOf="parent" […]

将界面传递给Fragment

让我们考虑一个情况,我有Fragment A和Fragment B B声明: public interface MyInterface { public void onTrigger(int position); } A实现这个接口。 在将Fragment B推入堆栈时,如何在Bundle传递Fragment A引用,以便在需要时可以获取onTrigger回调。 我的用例场景是A具有项目的ListView , B具有项目的ViewPager 。 两者都包含相同的项目,并且当用户从B -> A弹出B之前,应该触发A的回调,以更新其ListView位置以匹配B传呼机位置。 谢谢。

如何使用Fragment的数据绑定

我试图从官方的谷歌文档https://developer.android.com/tools/data-binding/guide.html数据绑定的例子 除了我试图将数据绑定应用于片段而不是活动。 我正在编译的错误 Error:(37, 27) No resource type specified (at 'text' with value '@{marsdata.martianSols}. onCreate的片段如下所示: @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); MartianDataBinding binding = MartianDataBinding.inflate(getActivity().getLayoutInflater()); binding.setMarsdata(this); } onCreateView的片段看起来像这样: @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.martian_data, container, false); } 部分我的布局文件的片段如下所示: <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android"> <data> […]

在提交FragmentTransaction之前检查状态是否保存

我有时会看到下面的堆栈跟踪提交,当用户没有看到活动(在状态被保存之后)时可能发生: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState at android.support.v4.app.FragmentManagerImpl.checkStateLoss(FragmentManager.java:1327) at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1338) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595) at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574) 看一下Android的源代码,这是非常重要的: private void checkStateLoss() { if (mStateSaved) { throw new IllegalStateException( "Can not perform this action after onSaveInstanceState"); } if (mNoTransactionsBecause != null) { throw new IllegalStateException( "Can not perform this action inside of " + mNoTransactionsBecause); } […]

片段实例被保留,但子片段不被重新连接

更新:接受的解答(bug)与答案的答案点,但也看到我的Kotlin基于解决方法作为答案下面。 这个代码在Kotlin中,但是我认为这是一个基本的Android片段生命周期问题。 我有一个片段,其中提到了另一个“子片段” 这里基本上是我在做什么: 我有一个retainInstance设置为true的主要片段 我在主片段中有一个字段,将保存对子片段的引用,最初这个字段为空 在主片段的onCreateView ,我检查是否subfragment字段为空,如果是这样,我创建一个subFragment的实例,并将其分配给字段 最后,我将子片段添加到主片段布局中的容器中。 如果该字段不为空,即由于配置更改,我们在onCreateView中,则不会重新创建子片段,只是尝试将其添加到包含器中。 当设备旋转时,我确实观察到被调用的子片段的onPaused()和onDestroyView()方法,但是在将保留的引用添加到子片段的过程中,没有看到在子片段上调用的任何lifecyle方法,在重新创建主片段视图时将其添加到child_container。 净影响是,我没有看到主片段中的亚片段视图。 如果我注释掉if(subfragment == null),并且每次创建一个新的子片段,我都会在视图中看到子片段。 更新 下面的答案指出了一个bug,其中childFragmentManager不保留配置更改。 这将最终打破我的预期用法,即在旋转后保留后台,但我认为我所看到的是不同的东西。 我将代码添加到onWindowFocusChanged方法的活动中,并在应用程序第一次启动时看到如下所示的内容: activity is in view fm = FragmentManager{b13b9b18 in Tab1Fragment{b13b2b98}} tab 1 fragments = [DefaultSubfragment{b13bb610 #0 id=0x7f0c0078}] 然后旋转后: activity is in view fm = FragmentManager{b13f9c30 in Tab1Fragment{b13b2b98}} tab 1 fragments = null 这里的fm是childFragmentManager,正如你所看到的,我们仍然有Tab1Fragment的实例,但它有一个新的childFragmentManager,我认为这是不需要的,并且由于下面的答案中报告的错误。 事情是,我没有添加子片段到这个新的 childFragmentManger。 所以看起来事务不会执行保留片段的引用,但是如果我创建了一个全新的片段,事务就完成了。 (我尝试在新的childFragmentManager上调用executePendingTransactions) […]

RecyclerView没有在背面填充

我有一个活动与2片段(让我们称之为A和B),每个片段有一个回收站的观点。 我通过做添加片段 val fragment = supportFragmentManager.findFragmentById(R.id.activity_home_fragment) this.supportFragmentManager .beginTransaction() .remove(fragment) .add(R.id.activity_home_fragment, newFragment) .addToBackStack(null) .commit() 当我做正向流动(A – > B)时,所有recyclerviews正常加载。 但是,当我回到第一个片段(B – > A)时,使用后退按钮,回收站视图不会加载。 我正在使用kotterknife来注入我的观点 val recyclerBuildList by bindView<RecyclerView>(R.id.fragment_build_list_recycler) 以下是我用来创建适配器的代码: override fun onResume() { super.onResume() val build1 = Build() build1.id = 3 build1.name = "Build 1" val build2 = Build() build2.id = 4 build2.name = "Build 2" val […]

在android kotlin中,使用步进库将自定义单选按钮值传递给多个片段,以便在摘要页面上使用

你好,我希望你们能帮我一把。 我很确定我接近回答,但似乎不能得到正确的答案。 我设置了12个使用stepstone-tech步进库的片段 每个片段减去摘要片段都有它自己的无线电组代表一个问题,每个无线电按钮通过标签分配一个值(需要在摘要片段上计算它的唯一值)。 每个片段被设置为在被允许移动到下一个片段之前需要响应。 所有这一切都运行平稳,我的期望,但我很难搞清楚如何拉标签值,保存它与我的DataManager接口,并获得我的onNextClick函数摘要片段。 PulseFragment class PulseFragment : Fragment(), BlockingStep { companion object { fun newInstance(): PulseFragment { return PulseFragment() } } @BindView(R.id.pulseGroup) lateinit var pulseGroup: RadioGroup lateinit var dataManager: DataManager override fun onAttach(context: Context?) { super.onAttach(context) if (context is DataManager) { dataManager = context } else { throw IllegalStateException("Activity must implement DataManager […]

FragmentTransaction隐藏/显示有时不起作用

我有一个活动底部导航选项卡,正在改变其中的片段。 当我在这些标签上来回点击时,在某个时候停止工作。 代码执行得很好,因为我把一些日志。 但片段没有被切换。 代码在kotlin中,但是非常简单 fun showTabFragment(tag: String) { val currentFragment: Fragment? = supportFragmentManager.fragments?.lastOrNull() var fragment = supportFragmentManager.findFragmentByTag(tag) val fragmentExists = fragment != null if (fragment == null) { when (tag) { TAG_LOGBOOK -> fragment = LogbookFragment() TAG_RECIPES -> fragment = RecipesFragment() TAG_PROFILE -> fragment = ProfileFragment() else -> fragment = MeetingPlacesFragment() } } val […]

添加片段在活动从片段不工作在Pixel XL安卓版本8.0.0

最近我更新了我的像素xl移动到Android版本8.0.0(Orio)之后 当我在我的应用程序中通过调用片段的主要活动中的方法添加片段,它不是在像素中工作,但相同的代码在其他手机如索尼Xperia的Android版本:5.1.1和三星S8的Android版本7.0 如何解决这个问题? 我的代码(在Kotlin)调用方法setUsernamePassword()在主要活动: (作为MainActivity的活动).setUsernamePassword() 主要活动代码 : import android.app.Fragment import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.widget.TextView class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) addFragmentToActivity(R.id.loginFragment,LoginFragment()) val loginText = findViewById(R.id.login_textView) as TextView loginText.setOnClickListener { addFragmentToActivity(R.id.loginFragment,LoginFragment()) } val registerText = findViewById(R.id.register_textView) as TextView registerText.setOnClickListener { addFragmentToActivity(R.id.registerFragment,RegisterFragment()) } } private fun addFragmentToActivity(frameId: Int,fragment: Fragment) { […]