【问题标题】:How to Load Fragment if it is not Null - Android?如果片段不是空的,如何加载片段 - Android?
【发布时间】:2018-08-28 14:16:56
【问题描述】:

我需要一些帮助,因为我对 android 有点陌生,在我正在开发的 android 应用程序中,我一直在 Fragment 之间导航。我使用代码在 Fragments 之间导航。

 private void displaySelectedScreen(int id){
        Fragment fragment=null;
        String fragment_tag="";
        switch(id)
        {
            case R.id.nav_listen:
                fragment=new ListenFragment();
                fragment_tag="LISTENTAG";
                break;
            case R.id.nav_programs:
                break;
            case R.id.nav_stories:
                break;
            case R.id.nav_about:
                break;
            case R.id.nav_feedback:
                break;
            case R.id.nav_share:
                shareTextUrl();
                break;
        }
        if(fragment!=null){
            FragmentTransaction ft=getSupportFragmentManager().beginTransaction();
            ft.replace(R.id.content_frame,fragment,fragment_tag);
            ft.commit();
        }
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
    }

我只需要检查之前是否存在(加载)片段,容器应该显示之前加载的片段。但是,如果在第一次加载 Fragment 之前没有加载 Fragment。

谁能帮我实现这件事?

非常感谢。 我的片段中的代码:(ListenFragment.java)

public class ListenFragment extends Fragment
{

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState)
    {
        super.onViewCreated(view, savedInstanceState);
        getActivity().setTitle("Listen Live");
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        final View InputFragmentView=inflater.inflate(R.layout.listen_layout,container,false);

        return InputFragmentView;
    }

【问题讨论】:

  • ListenFragment 中,检查条件可以是如果view != null 那么...这是您要问的吗?
  • 如果你能给我看一个样本就太好了,拜托我是android新手。
  • 我只是希望每次导航回该片段时都不会创建 ListenFragment。

标签: android android-fragments


【解决方案1】:

您不需要声明对 Fragment 实例的变量引用。相反,按标签保存您的片段然后获取它。像这样:

Fragment fragment = getSupportFragmentManager().findFragmentByTag("fragment_tag");
if(fragment == null) {
   fragment=new ListenFragment();
}
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fragment, fragment_tag);
ft.commit();

【讨论】:

  • 我会尽力让你知道的。
  • 非常感谢它的工作!你节省了我很多时间。
【解决方案2】:

使用以下方法获取 Fragment:

getFragmentManager().findFragmentById(R.is.xyz)

getFragmentManager().findFragmentByTAG("XYZ")

然后使用启动Fragment:

supportFragmentManager.beginTransaction()

这里有一个类似的问题,它可能会有所帮助: Check if a fragment exists and reuse it

【讨论】:

    猜你喜欢
    • 2015-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多