标签: fragmentmanager

如何在Android中将标记设置为片段

我已经查看了Stackoverflow上的所有问题,但无法找到这个问题的唯一确定答案.如何将标记设置为aFragment以便通过它检索getFragmentManager().findFragmentByTag()?有人可以给出一个如何创建标签的简单代码示例Fragment吗?

android android-fragments fragmentmanager

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

在哪里调用getChildFragmentManager()?

问题

根据谷歌的文档:

您现在可以将片段嵌入片段中.这对于您希望将动态和可重用UI组件放入自身动态且可重用的UI组件的各种情况都很有用.例如,如果使用ViewPager创建向左和向右滑动并占用大部分屏幕空间的片段,则现在可以将片段插入到每个片段页面中.要嵌套片段,只需在要添加片段的片段上调用getChildFragmentManager().这将返回一个FragmentManager,您可以像通常从顶级活动那样使用它来创建片段事务.例如,这里有一些代码可以在现有的Fragment类中添加一个片段:

Fragment videoFragment = new VideoPlayerFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.video_fragment, videoFragment).commit();
Run Code Online (Sandbox Code Playgroud)

所以我(例如)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 = (FrameLayout) mFragmentView.findViewById(R.id.framelayout);

        return mFragmentView;
    }   

    public void onDestroyView() {
        super.onDestroyView();
    }    

    /* ISSUE */
    public void doSomethingSpecial() {
        FragmentManager tFragmentManager = getChildFragmentManager();
    }
}
Run Code Online (Sandbox Code Playgroud)

MainActivity我初始化我的片段像:

mTestFragment = …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager fragmentmanager android-nested-fragment

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

popBackStack导致一次又一次地调用片段的oncreateView

我有3个片段A,B,CI写了一段代码来替换它们并维护backstack:

 public void addFragment(Fragment fragmentToAdd, String fragmentTag) {
        FragmentManager supportFragmentManager = getSupportFragmentManager();
        Fragment activeFragment = getActiveFragment();
        FragmentTransaction fragmentTransaction = supportFragmentManager
                .beginTransaction();
        if (null != activeFragment) {
            fragmentTransaction.hide(activeFragment);
        }
        fragmentTransaction.replace(R.id.layout_child_activity, fragmentToAdd,
                fragmentTag);

       if (supportFragmentManager.getBackStackEntryCount() > 1) {
            supportFragmentManager.popBackStack();
        }
        fragmentTransaction.addToBackStack(fragmentTag);
        fragmentTransaction.commit();
    }
Run Code Online (Sandbox Code Playgroud)

在这段代码中

if (supportFragmentManager.getBackStackEntryCount() > 1) {
    supportFragmentManager.popBackStack();
}
Run Code Online (Sandbox Code Playgroud)

如果堆栈长度大于1,我使用pop来获取最新的片段.现在由于这个,当长度大于1时,它会一次又一次地调用onCreate视图.喜欢 :

  1. 打开A.
  2. 开放B.
  3. 打开C. (如果打开C. onCreateView的A被调用.)

为什么我会遇到这种行为?当我删除斜体代码时,它没有发生.

android fragment android-fragments back-stack fragmentmanager

10
推荐指数
1
解决办法
5124
查看次数

onViewCreated - 替换片段的错误位置?

如果用户没有数据,我会显示一个空片段.在那个emptyFragment(in onViewCreated)中,我检查一个条件,有时想用另一个替换那个空的Fragment,所以我在相应的活动上调用一个替换片段的方法.

一些用户(目前只有三星,6.0.1,但我不知道这是否意味着什么)在我所遇到的线路上遇到了崩溃executePendingTransactions:

IllegalStateException:

Fatal Exception: java.lang.RuntimeException
Unable to resume activity
{....app.activities.MyActivity_}:
java.lang.IllegalStateException: FragmentManager is already executing transactions
Run Code Online (Sandbox Code Playgroud)

这是6.0.1中onViewCreated的错误还是错误的地方?

编辑

这是一个可能的解决方案吗?

    if (addToBackStack) {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).addToBackStack(name).commitAllowingStateLoss();
        getSupportFragmentManager().executePendingTransactions();
    } else {
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).commitNow();
    }
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception android-fragments fragmentmanager

10
推荐指数
2
解决办法
948
查看次数

FragmentTransaction hide/show有时不起作用

我有一个带有底部导航标签的活动,正在更改其中的片段.当我在这些标签上来回点击时,它会在某些时候停止工作.代码执行得很好,因为我把一些日志放入其中.但片段没有被切换.

代码在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 transaction = supportFragmentManager.beginTransaction()

        if (currentFragment != null) {
            Log.i("jacek", "hiding " + currentFragment.javaClass.simpleName)
            transaction.hide(currentFragment)
        }

        if (fragmentExists) {
            Log.i("jacek", "showing " + fragment.javaClass.simpleName)
            transaction.show(fragment)
        } else {
            Log.i("jacek", …
Run Code Online (Sandbox Code Playgroud)

android android-fragments kotlin fragmentmanager

10
推荐指数
3
解决办法
4669
查看次数

在backstack中添加新片段时,onBackStackChanged()调用两次

所以,我注意到有趣的问题.当我以编程方式添加新片段时,OnBackStackChangedListener中的onBackStackChanged方法被调用两次,但它必须只调用一次.这是我的活动代码:

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener{

    private FragmentManager fragmentManager;
    private Button button1;
    private Button button2;
    private Button button3;

    private Fragment defaultFragment;
    private Fragment previousFragment;
    private Fragment currentFragment;
    private String currentFragmentTag;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        button1 = (Button) findViewById(R.id.button);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);

        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showFragment(new FragmentOne(), FragmentOne.TAG);
            }
        }); …
Run Code Online (Sandbox Code Playgroud)

java android android-fragments android-view fragmentmanager

10
推荐指数
1
解决办法
4053
查看次数

无需轻拂即可管理片段Backstack流程

  1. 我创建了一个AppCompatActivity Opened片段A-> B-> C-> D-> E-> F with replace()
  2. 当我按下按钮时,我在F上包含按钮我要清除碎片到C并想在C顶部打开G所以新的序列将是A-> B-> C-> GI可以用popBackStackImmediate执行此操作(并使用替换功能在C顶部添加G.

问题:当我按下按钮时,我看到C的几分之一秒,然后显示G.To防止这种情况我试图在答案的帮助下停止动画,但即使动画停止,C仍然可见几分之一秒片段.

在更换C顶部的片段时,有没有更好的方法来设计片段流或解决这些电影的方法?

android android-fragments fragmentmanager fragment-backstack

10
推荐指数
1
解决办法
317
查看次数

FragmentPagerAdapter已弃用

由于API 27 FragmentPagerAdapter已弃用。最好的替代方法是什么?

就我而言,我知道super(fragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT)需要使用类似的东西,但是我不知道代码需要放在哪里。

我在课堂上得到了这些进口:

import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
Run Code Online (Sandbox Code Playgroud)

FragmentPagerAdapterclass MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager){被划掉。

class MyViewPagerAdapter(manager: FragmentManager) : FragmentPagerAdapter(manager){
        private val fragmentList : MutableList<androidx.fragment.app.Fragment> = ArrayList()
        private val titleList : MutableList<String> = ArrayList()

        override fun getItem(position: Int): androidx.fragment.app.Fragment {
            return fragmentList[position]
        }

        override fun getCount(): Int {
            return fragmentList.size
        }

        fun addFragment(fragment: androidx.fragment.app.Fragment, title: String){
            fragmentList.add(fragment)
            titleList.add(title)
        }

        override fun getPageTitle(position: Int): CharSequence? {
            return titleList[position]
        }
    }
Run Code Online (Sandbox Code Playgroud)

android android-viewpager kotlin fragmentpageradapter fragmentmanager

10
推荐指数
4
解决办法
4338
查看次数

androidx getFragmentManager() 已被弃用

获得弃用警告androidx.fragment.app.Fragment

警告:[deprecation] getFragmentManager()inFragment已被弃用。

该怎么办?

android android-fragments fragmentmanager deprecation-warning androidx

10
推荐指数
2
解决办法
5411
查看次数

如何获取 NavHostFragment

我正在将 Android 的导航架构组件集成到我的应用程序中。我在将数据从活动传递到片段的开头时遇到了一些问题,所以我遵循了这个答案:导航架构组件-将参数数据传递到 startDestination

这个逻辑对我来说似乎很合理,但我正在努力确定如何实际获得 NavHostFragment。Elliot Shrock 使用了这条线——

val navHostFragment = navFragment as NavHostFragment

但我还没有找到一个有效的 Java 等价物。我尝试通过使用获取我的 navHost 的片段 getSupportFragmentManager().findFragmentById(R.id.[mynavhostid])

但此命令返回空值。有任何想法吗?

android android-fragments fragmentmanager android-architecture-components android-architecture-navigation

9
推荐指数
1
解决办法
6894
查看次数