标签: fragmenttransaction

在Transaction.remove()之后,Fragment中的ViewPager消失了(维护实例?)

我正在使用带有v4软件包的Google API 8(Android 2.2).

嗨,这是我的问题:

我有一个FragmentActivity,它有一个总是停留在屏幕上的菜单和一个小容器(一个FrameLayout),我放了许多片段.当我隐藏并显示片段时,我的应用程序工作正常,但是在我加载所有片段后崩溃,因为我使用的内存有限.在这种情况下,我必须在加载其他片段时删除一些片段,因此应用程序不会崩溃.但是这里出现了另一个问题,我删除后我的寻呼机没有重新加载,所有其他片段工作正常.只有我的寻呼机没有显示,它们不会崩溃,只是消失.这里有一些代码可以帮助您了解我的问题:

MyFragmentActivity.java具有以下布局:

 <LinearLayout

        ...(some code from menu that doesn't matter)

        <FrameLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </FrameLayout>
    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

在那个FrameLayout中,我把所有碎片都放了.寻呼机片段是其中之一,其布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <android.support.v4.view.ViewPager
        android:id="@+android:id/some_pager"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

我实现了这个抽象类AbstractPagerFragment:

import java.util.List;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public abstract class AbstractPagerFragment extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View fragment …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager fragmenttransaction

5
推荐指数
1
解决办法
2531
查看次数

Android:何时使用FragmentTransaction.remove是否合适?

我以为我已经明白你应该在onCreate()和onDestroy()中的FragmentTransaction.remove()中调用FragmentTransaction.add().我的应用程序在onDestroy()崩溃时出现此错误:

06-26 15:25:50.213: E/AndroidRuntime(579): java.lang.RuntimeException: Unable to destroy activity {com.myapp/com.myapp.MainActivity}: java.lang.IllegalStateException: Activity has been destroyed
Run Code Online (Sandbox Code Playgroud)

如果不在onCreate/onDestroy()中我什么时候调用这些东西?

crash android fragmenttransaction

5
推荐指数
1
解决办法
1109
查看次数

如何将片段添加到DialogFragment的布局?

我有一个自定义DialogFragment,其中包含布局,一些UI元素和Fragment holder布局.我需要做的是将内容片段膨胀到持有者布局中并在其中提供导航.单击添加的片段内的按钮后,视图将导航到另一个视图.片段将被同一个持有者中的另一个片段替换,contentFragment1即将显示一些数据,点击预览按钮将替换contentFragment1contentFragment2.我读到某处你无法xml用另一个替换硬编码的片段.所以我尝试添加contentFragment1viewholderonActivityCreated()对话片段.但是我收到一个错误,指出R.id.fragmentHolder找不到资源.可能的原因是什么?

这是我的代码DialogFragment:

public class MyDialog extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    Dialog customDialog = new Dialog(getActivity());
    customDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
    customDialog.setContentView(R.layout.reports_dialog);
    return customDialog;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    android.app.FragmentTransaction fragmentTransaction =getFragmentManager().beginTransaction();
    fragmentTransaction.add(R.id.myFragmentHolder, new ReportsListFragment());
    fragmentTransaction.commit();
    super.onActivityCreated(savedInstanceState);
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="400dp"
    android:background="@android:color/transparent" >


    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="This is my header text view …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-fragments android-dialogfragment fragmenttransaction

5
推荐指数
2
解决办法
6988
查看次数

Android:通过片段交易获得白屏

我正在制作一个新闻应用程序,其中有一个片段将所有新闻存储在一个列表中,另一个片段具有视频列表。当您触摸新片段时,它将从名为openNewsCont的活动中调用一个方法,该方法将用另一个片段替换当前片段。

我遇到的问题是,当我调用该方法时,出现黑屏,我看了很多其他代码,但找不到解决问题的方法。

这是我从MainActivity.java调用的方法

public void openNewsCont(String text) {

    android.support.v4.app.FragmentManager fm = getSupportFragmentManager();
    android.support.v4.app.FragmentTransaction ft = fm.beginTransaction();
    ft.replace(R.id.pager, new NewsContent() );
    ft.addToBackStack(null);
    ft.commit();
    fm.executePendingTransactions();
 }
Run Code Online (Sandbox Code Playgroud)

这是保存新闻并从MainActivity.java调用方法的Tab1.java。

package com.example.link_test;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.LinearLayout;

    public class Tab1 extends Fragment {

          public View onCreateView(LayoutInflater inflater, ViewGroup container,
                  Bundle savedInstanceState) {

              final View android = inflater.inflate(R.layout.tab1, container, false);             
              LinearLayout newLink = (LinearLayout) android.findViewById(R.id.news1);
              newLink.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    String text = …
Run Code Online (Sandbox Code Playgroud)

java android fragment android-fragments fragmenttransaction

5
推荐指数
1
解决办法
6501
查看次数

片段事务时冻结UI

我正面临使用FragmentManager替换片段的问题.我的问题是冻结用户界面.我正在努力找到一些好的做法和/或库来处理我的问题.

我的部分代码:

主要活动布局:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<FrameLayout
    android:id="@+id/content"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

主要活动类

public class MyActivity extends Activity 
Run Code Online (Sandbox Code Playgroud)

用方法

  public void nextFragment(Fragment fragment, int position) {
    fragment.setArguments(new Bundle());
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager
            .beginTransaction()
            .replace(R.id.content, fragment).commit();

}
Run Code Online (Sandbox Code Playgroud)

我的每个片段都像

import android.app.Fragment;

public class SomeFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    RelativeLayout rootView = (RelativeLayout) inflater.inflate(
            R.layout.fragment_layout, container, false);
    //many long time data downloading & creating view
    }

private void nextFragment() { …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-fragmentactivity fragmenttransaction

5
推荐指数
1
解决办法
4096
查看次数

如何在此代码上为FragmentTransaction设置自定义动画

我有5个片段,我使用以下代码为FragmentTransaction setCustomAnimations:

FragmentTransaction trans = getFragmentManager().beginTransaction();
trans.setCustomAnimations(android.R.anim.slide_in_left, android.R.anim.slide_out_right);
Run Code Online (Sandbox Code Playgroud)

但是如何为这个设置自定义动画:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK ) {
        if (getSupportFragmentManager().getBackStackEntryCount() == 0)
        {
            this.finish();
            return false;
        }
        else
        {
            getSupportFragmentManager().popBackStack();
            return false;
        }



    }

    return super.onKeyDown(keyCode, event);
}
Run Code Online (Sandbox Code Playgroud)

android fragmenttransaction

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

什么时候提交FragmentTransaction是安全的?

根据文件

片段事务只能在活动保存其状态之前创建/提交.如果您尝试在Activity.onSaveInstanceState()之后(以及之后的Activity.onStart或Activity.onResume()之前提交事务,则会出现错误.

我可以理解片段事务在Activity.onSaveInstanceState()之后无法提交的第一部分,因为如果需要恢复活动,则提交后的状态可能会丢失.

但我不明白为什么我们不能在Activity.onStart或Activity.onResume()之前提交片段事务?Oncreate()也在Activity.onStart或Activity.onResume()之前.这是否意味着我们甚至无法在oncreate()中提交它?

android android-fragments fragmenttransaction

5
推荐指数
1
解决办法
1787
查看次数

如何修复“FragmentManager 已在执行事务”错误?

自从我更新了我的应用程序实现以来,我发现自己无法使用该应用程序。

我收到“java.lang.IllegalStateException:FragmentManager 已经在执行事务”错误,并且似乎找不到此问题的解决方案...

public class MainActivity extends AppCompatActivity {

private Toolbar mainToolbar;
private FirebaseAuth mAuth;
private FirebaseFirestore firebaseFirestore;
private String current_user_id;
private BottomNavigationView mainbottomNav;
private HomeFragment accountFragment;
private NotificationFragment notificationFragment;
private FilterFragment filterFragment;
private UserProfileFragment userProfileFragment;
private MapFragment homeFragment;
private static final String TAG = "MainActivity";



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

    mAuth = FirebaseAuth.getInstance();
    firebaseFirestore = FirebaseFirestore.getInstance();


    if (mAuth.getCurrentUser() != null) {
        current_user_id = mAuth.getCurrentUser().getUid();
        mainbottomNav = findViewById(R.id.mainBottomNav);
        BottomNavigationViewHelper.disableShiftMode(mainbottomNav);


        BottomNavigationMenuView bottomNavigationMenuView =
                (BottomNavigationMenuView) mainbottomNav.getChildAt(0);
        View v = …
Run Code Online (Sandbox Code Playgroud)

java android fragmenttransaction fragment-lifecycle google-cloud-firestore

5
推荐指数
0
解决办法
1655
查看次数

使用 Android 导航组件的深层链接和动画

我正在尝试实现忘记密码流程。我想做的是在应用程序内处理收到的电子邮件,其中包含指向忘记密码网页的链接。

我使用导航组件创建了一个深层链接,该链接打开正确的片段(带有密码字段的片段)。所以我可以更改密码。单击“返回”,我返回到登录屏幕,这是导航图的起点。

除了动画之外,一切都按预期进行。当我在目的地之间创建操作时,我可以分配进入/退出/popenter/popexit 动画,但通过深层链接,我不会创建任何操作,因此当我推回时,我到达了预期的片段,但没有动画玩过。

我尝试了一下代码,但没有结果,而且我在文档中找不到任何可能的解决方案。

我尝试在导航图中创建一些操作(右键单击目的地有 4 个不同的选项:

  • 到目的地(最常见也是我经常使用的)
  • 对自己(我不明白这样做的目的)
  • 返回源(我不明白这样做的目的)
  • 全球的

他们似乎都没有解决我的问题。有想法吗?提前致谢。

animation android fragmenttransaction android-architecture-navigation android-deep-link

5
推荐指数
1
解决办法
1591
查看次数

Fragment Transaction .add vs .replace 最佳视角?

使用片段事务时,我们可以使用addreplace方法来完成它们。如果我们使用add,则前一个片段不会被销毁并保留在内存中。如果我们使用replace之前的片段被销毁并在我们回去时再次重新创建。从最佳(内存、CPU 等)的角度来看,什么更有效/更好?

android fragment android-fragments fragmenttransaction

5
推荐指数
1
解决办法
150
查看次数