从活动中调用片段(来自OnClickListener)

时间:2016-08-07 19:13:46

标签: android android-fragments

我的Activity中有一个按钮,当我点击这个按钮时,我想调用一个片段。

例如,如果我想调用一个Activity,我可以使用intent,但如果我想调用一个Fragment,我该怎么办呢?

我已经检查了其他问题,但我没有找到我所问的问题的答案。

btnHome.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });

我要把它放在里面?

2 个答案:

答案 0 :(得分:1)

您可以动态添加片段。您想要创建片段。

要以编程方式添加或删除片段,您需要 FragmentManager FragmentTransaction

XML布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

 <FrameLayout
    android:id="@+id/myFrame" <!-- Id which you're gonna use in Java -->
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

 <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Click me" />

 </LinearLayout>

<强>爪哇

btnHome.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

  FragmentManager fragmentManager = getFragmentManager ();
  FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction ();

   MyFragment myfragment = new MyFragment();  //your fragment 

 // work here to add, remove, etc
  fragmentTransaction.add (R.id.myFrame, myfragment);
  fragmentTransaction.commit ();

    }
});

See this doc

答案 1 :(得分:1)

您无法打开新片段。片段需要始终由活动托管。如果片段处于相同的活动(例如制表符),那么后退键导航将变得棘手我假设您要打开具有该片段的新屏幕。 因此,您只需创建一个新活动并将新片段放在那里。然后,该活动将通过活动类明确地或通过意图过滤器隐式地对意图作出反应。

您的问题的答案很简单:用新的Fragment替换当前的Fragment并将事务推送到backstack。这样可以保留后退按钮的行为......

创建一个新的活动真的打败了使用碎片的整个目的......非常适得其反。

#include "header.hpp"
#include "backgroundItem_class.hpp"
#include "character_class.hpp"
#include "player_class.hpp"

player::player(std::string file_a, std::string file_b, std::string file_c, std::string file_d, std::string file_e, std::string file_f, std::string file_g, std::string file_h, std::string file_i, std::string file_j, std::string file_k, std::string file_l)
:player_texture_state(0)
{
    setFilenames(file_a, file_b, file_c, file_d, file_e, file_f, file_g, file_h, file_i, file_j, file_k, file_l);
    setTextures(_filenames);

    _sprite.setTexture(_textures[0]);
    _sprite.setOrigin(8, 8);
    _sprite.setPosition(500, 350);
}
/*With player::walk as up there*/

https://developer.android.com/guide/components/fragments.html#Transactions

<强> 报价