Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 片段活动中的onclick事件不工作_Android_Android Fragments - Fatal编程技术网

Android 片段活动中的onclick事件不工作

Android 片段活动中的onclick事件不工作,android,android-fragments,Android,Android Fragments,我有一个活动a,其中有一个片段 在此活动中,根据用户在活动A中的输入,片段更改为片段A(调用活动A时默认设置)或片段B 在这两个片段A和B中,我都有一个带有单击侦听器的按钮但此按钮仅在活动A启动时第一次起作用。 当用户更改片段时,这些片段中的按钮在单击时停止响应 请建议我需要做什么,以便在用户更改片段时使片段A和B中的按钮工作 我用以下代码替换基于用户输入的片段: fr = new FragmentOneDice(); FragmentManager fm = getFragmentManage

我有一个活动a,其中有一个片段

在此活动中,根据用户在活动A中的输入,片段更改为片段A(调用活动A时默认设置)或片段B

在这两个片段A和B中,我都有一个带有单击侦听器的按钮但此按钮仅在活动A启动时第一次起作用。

当用户更改片段时,这些片段中的按钮在单击时停止响应

请建议我需要做什么,以便在用户更改片段时使片段A和B中的按钮工作

我用以下代码替换基于用户输入的片段:

fr = new FragmentOneDice();
FragmentManager fm = getFragmentManager();
FragmentTransaction fragmentTransaction = fm.beginTransaction();
fragmentTransaction.replace(R.id.fragment_place, fr);
fragmentTransaction.commit();
在片段中,单击侦听器按钮的活动代码如下所示

import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;

import java.util.ArrayList;
import java.util.Collections;

public class FragmentOneDice extends Fragment implements View.OnClickListener {

    Button button1;
    View view;

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

        //Inflate the layout for this fragment


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


        button1 = (Button) view.findViewById(R.id.button_one);
        button1.setOnClickListener(this);

        return view;


    }

    @Override
    public void onClick(View v) {
        //MY CODE HERE
}

首先你记得一件事,
片段到片段直接事务,或片段到片段直接替换是不可能的。只能抛出该活动


在第一个片段中定义一个接口,并使容器活动实现该接口,这样您就可以将数据从片段发送到活动。另一方面,创建第二个片段并在其中定义接口。在定义第二个片段的第一个片段接口的实现方法的Content Activity inside中,我们通过接口将数据分配给第二个片段。

问题出在我的Activity_main.XML中,我将
定义为所有片段的占位符,并将一个片段设置为默认值。因此,当加载其他片段时,它会重叠,导致按钮上的点击事件不起作用,我将
更改为
作为占位符。我的问题解决了

不是有效的onClick侦听器,片段中的onClick方法是片段本身的onClick。尝试替换
按钮1.setOnClickListener(此)button1.setOnClickListener(new View.OnClickListener(){@Override public void onClick(View v){/*您的代码*/}})编写代码>为什么无效,您能解释一下吗?。因为正如我在问题中所说的,当第一次创建活动A并且用户没有尝试更改片段时,onClick就可以工作。当用户更改片段时,onClick停止工作。恕我直言,@ThisNameBetterBeAvailable,FragmentOneDice通过重写onClick()实现View.OnCLickListener,因此它是一个有效的视图。OnCLickListener.Like@Gaurav建议:请在onClick()中指定您的代码@ThisNameBetterBeAvailable我尝试了您的建议,它给出了错误,onClickListener是抽象的,不能被实例化。我对java和android非常陌生,从你的回答中我一点也不懂。你能举个例子解释一下吗。很快我会发布我的答案