单击按钮时从 Fragment 打开 Fragment

塔斯

我在单击按钮时无法从另一个片段中打开一个片段。一切似乎都有意义(对我而言),我尝试使用我的代码(更改布局,替换片段等),但没有任何效果。

这是我的RoleFragment.java(包含按钮的片段)

public class RolesFragment extends Fragment implements View.OnClickListener {

GridView gridView;
ArrayList<Players> playersList;
MyAdapter adapter;

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

    View view = inflater.inflate(R.layout.fragment_viewroles, container, false);

    gridView = (GridView) view.findViewById(R.id.gv_players);
    Button nightround = (Button) view.findViewById(R.id.buttonNightRound);

    nightround.setOnClickListener(this);

    DatabaseHelper databaseHelper = new DatabaseHelper(getActivity());
    playersList = new ArrayList<Players>();

    playersList = databaseHelper.getPlayers();
    adapter = new MyAdapter(getActivity(), playersList);
    gridView.setAdapter(adapter);

    return view;
}


@Override
public void onClick(View v) {
    Fragment fragment = null;
    switch (v.getId()) {
        case R.id.buttonNightRound:
            fragment = new NightRound();
            replaceFragment(fragment);
            break;

    }

}

public void replaceFragment(Fragment someFragment) {
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, someFragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

 }

这是我的fragment_viewroles.xml文件。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.tuss.mafia.GameActivity" >

<Button
    android:id="@+id/buttonNightRound"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Night Round"
    android:onClick="FragmentNightRoundClick"
    android:clickable="true"
    android:layout_weight="2"/>


<GridView
    android:id="@+id/gv_players"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:columnWidth="150dp"
    android:horizontalSpacing="10dp"
    android:verticalSpacing="10dp"
    android:gravity="center"
    android:layout_below="@id/buttonNightRound">
</GridView>

</RelativeLayout>

问题是,当我点击按钮时什么也没有发生。

路易斯·费尔南多·萨尔瓦特拉

这里有一些问题。首先,您必须R.id.fragment_container在片段中添加一个带有 id 的容器,例如FrameLayout它将存储您的新片段。

如果你想打开一个片段作为一个新的屏幕,你必须把它放在一个新的活动中。片段是一块屏幕,不应在没有活动或查看寻呼机的情况下使用。

看看 Android 开发者页面:http : //developer.android.com/training/basics/fragments/communicating.html#DefineInterface

基本上,您在 Fragment A 中定义一个接口,并让您的 Activity 实现该接口。现在您可以在您的 Fragment 中调用接口方法,您的 Activity 将接收该事件。现在在您的活动中,您可以调用第二个 Fragment 以使用接收到的值更新 textview

// You Activity implements your interface
public class YourActivity implements FragmentA.TextClicked{
    @Override
    public void sendText(String text){
        // Get Fragment B
        FraB frag = (FragB)
            getSupportFragmentManager().findFragmentById(R.id.fragment_b);
        frag.updateText(text);
    }
}


// Fragment A defines an Interface, and calls the method when needed
public class FragA extends Fragment{

    TextClicked mCallback;

    public interface TextClicked{
        public void sendText(String text);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (TextClicked) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                + " must implement TextClicked");
        }
    }

    public void someMethod(){
        mCallback.sendText("YOUR TEXT");
    }

    @Override
    public void onDetach() {
        mCallback = null; // => avoid leaking, thanks @Deepscorn
        super.onDetach();
    }
}

// Fragment B has a public method to do something with the text
public class FragB extends Fragment{

    public void updateText(String text){
        // Here you have it
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

当我尝试打开 Fragment 时应用程序崩溃

来自分类Dev

从FragmentActivity中打开新的Fragment

来自分类Dev

Fragment 中未触发按钮单击事件

来自分类Dev

单击按钮时,在Fragment中调用数字时,startActivity(intent)显示错误

来自分类Dev

单击 Fragment 在 Activity 中通过

来自分类Dev

Fragment中的浮动操作按钮

来自分类Dev

每次单击按钮后,Fragment正在运行Web服务

来自分类Dev

单击按钮时打开Webview

来自分类Dev

单击按钮时打开Webview

来自分类Dev

在 Fragment 上单击 RecyclerView 的 Adapter(Photos) 的 ITEM 时显示 ImageView

来自分类Dev

打开应用程序时未加载Android Fragment?

来自分类Dev

无法从 Fragment Activity 打开 JSON 文件 - Android Studio

来自分类Dev

如何从 Fragment 打开一个新的 Activity?

来自分类Dev

为什么我第一次打开Activity时onCreate在我的Fragment中调用了两次

来自分类Dev

在 Fragment 中动态添加按钮

来自分类Dev

Android在Fragment内添加Fragment

来自分类Dev

Android 从 Fragment 调用 Fragment 方法

来自分类Dev

从活动调用Fragment方法时为NullPointer

来自分类Dev

继承Fragment时奇怪的null引用异常

来自分类Dev

在Fragment上调用RecycleView时应用崩溃

来自分类Dev

将setExitTransition用于Fragment时发生NullPointerException

来自分类Dev

在Android中使用Fragment时发生ClassCastException

来自分类Dev

在 Kotlin 中从 Fragment 声明 Intent 时出错:

来自分类Dev

防止单击按钮时打开引导模态

来自分类Dev

单击按钮时打开随机活动

来自分类Dev

防止单击按钮时打开VBE

来自分类Dev

单击按钮时如何打开新活动?

来自分类Dev

单击打开输入的按钮时聚焦

来自分类Dev

单击按钮将 Edittext 值复制到同一 Fragment 中的其他 Edittext

Related 相关文章

热门标签

归档