我正在使用带有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
我以为我已经明白你应该在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()中我什么时候调用这些东西?
我有一个自定义DialogFragment,其中包含布局,一些UI元素和Fragment holder布局.我需要做的是将内容片段膨胀到持有者布局中并在其中提供导航.单击添加的片段内的按钮后,视图将导航到另一个视图.片段将被同一个持有者中的另一个片段替换,contentFragment1即将显示一些数据,点击预览按钮将替换contentFragment1为contentFragment2.我读到某处你无法xml用另一个替换硬编码的片段.所以我尝试添加contentFragment1到viewholder从onActivityCreated()对话片段.但是我收到一个错误,指出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
我正在制作一个新闻应用程序,其中有一个片段将所有新闻存储在一个列表中,另一个片段具有视频列表。当您触摸新片段时,它将从名为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) 我正面临使用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个片段,我使用以下代码为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) 根据文件
片段事务只能在活动保存其状态之前创建/提交.如果您尝试在Activity.onSaveInstanceState()之后(以及之后的Activity.onStart或Activity.onResume()之前提交事务,则会出现错误.
我可以理解片段事务在Activity.onSaveInstanceState()之后无法提交的第一部分,因为如果需要恢复活动,则提交后的状态可能会丢失.
但我不明白为什么我们不能在Activity.onStart或Activity.onResume()之前提交片段事务?Oncreate()也在Activity.onStart或Activity.onResume()之前.这是否意味着我们甚至无法在oncreate()中提交它?
自从我更新了我的应用程序实现以来,我发现自己无法使用该应用程序。
我收到“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
我正在尝试实现忘记密码流程。我想做的是在应用程序内处理收到的电子邮件,其中包含指向忘记密码网页的链接。
我使用导航组件创建了一个深层链接,该链接打开正确的片段(带有密码字段的片段)。所以我可以更改密码。单击“返回”,我返回到登录屏幕,这是导航图的起点。
除了动画之外,一切都按预期进行。当我在目的地之间创建操作时,我可以分配进入/退出/popenter/popexit 动画,但通过深层链接,我不会创建任何操作,因此当我推回时,我到达了预期的片段,但没有动画玩过。
我尝试了一下代码,但没有结果,而且我在文档中找不到任何可能的解决方案。
我尝试在导航图中创建一些操作(右键单击目的地有 4 个不同的选项:
他们似乎都没有解决我的问题。有想法吗?提前致谢。
animation android fragmenttransaction android-architecture-navigation android-deep-link
使用片段事务时,我们可以使用add和replace方法来完成它们。如果我们使用add,则前一个片段不会被销毁并保留在内存中。如果我们使用replace之前的片段被销毁并在我们回去时再次重新创建。从最佳(内存、CPU 等)的角度来看,什么更有效/更好?