【问题标题】:Adding fragments to activity将片段添加到活动
【发布时间】:2017-06-07 16:39:03
【问题描述】:

首先,我在这里阅读了所有内容。 https://developer.android.com/guide/components/fragments.html

我有一个活动,我想水平划分屏幕并添加 2 个片段。我知道如何在 XML 上添加片段,但我不希望这样。我想在 Java 上添加它们。

所以问题是 FragmentManager 不起作用,除非我的活动扩展了 Fragment。我应该在活动上这样做还是应该在其中一个片段上添加片段事务方法?

如果我将我的活动扩展到 Fragment,它是否也会变成一个 Fragment?

如果我将 FragmentManager 和 FragmentTransaction 放在其中一个 Fragment 上,我该如何与活动建立连接?

这是我希望我的片段显示在上面的活动

import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class ConversionActivity extends AppCompatActivity {

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

        NumpadFragment fragment = new NumpadFragment();
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.numpad_layout,fragment);
        fragmentTransaction.commit();

    }
}

这是其中一个片段

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class NumpadFragment extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_numpad,container,false);
    }
}

【问题讨论】:

  • So the problem is FragmentManager doesnt work unless my activity extends Fragment 是什么意思?
  • 要使用代码添加到 Fragment,只需在 activity_conversion.xml 中创建两个容器布局,然后使用 fragmentTransaction.add(R.id.<first_layout_id>,fragment); 和 fragmentTransaction.add(R.id.<second_layout_id>,fragment); 添加两个 Fragment
  • 您想使用getSupportFragmentManager() 而不是getFragmentManager()。
  • 当我将鼠标悬停在 FragmentManager 上时。我收到不兼容的类型错误。它说我需要导入 android.support.v4.app.FragmentManager 而不是 android.app.FragmentManager。但我有第一个。如果我扩展到 Fragment,该错误就会消失。
  • @MikeM。使用时应用程序崩溃。

标签: java android android-fragments fragmentmanager


【解决方案1】:

一些建议:

  • 使用fragmentTransaction.replace(除非您需要将片段添加到堆栈中)
  • 作为片段的容器,使用 FrameLayout
  • 不要通过“new”运算符创建新片段。改为添加 newInstance() 方法并通过调用该方法创建新的片段实例。此外,实现片段和活动之间的交互。提示:使用 Android Studio 向导将片段添加到您的项目中。 Android Studio 将生成骨架,其中包含所有需要的方法
  • 你肯定需要使用getSupportFragmentManager(因为你的片段是android.support.v4.app.Fragment)
  • DEBUG! - 如果你说“我的应用程序崩溃了”,那就没用了。发布您的 logcat/exception/whatever 以显示崩溃原因。

【讨论】:

  • replace 不需要将片段添加到堆栈。
  • 使用 getSupportFragmentManager 回答了我的问题,谢谢。是不是因为getFragmentManager与android.support.v4.app.Fragment不兼容?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
相关资源
最近更新 更多