java - PerformClick()方法返回错误

标签 java android onclicklistener

我有 2 个类被 fragment 覆盖。 主页.java hometwo.java

单击名为 home.java 的类的名为 btn 的按钮。 我希望在名为 btnctwo 的按钮上自动单击名为 hometwo.java 的类。

home.java

public class home extends Fragment {
    Button btn;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.home, container, false);



        btn =  rootView.findViewById(R.id.btnc);
btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        hometwo hometwox = new hometwo();

        hometwox.btnctwo
                .post(new Runnable(){
                    @Override
                    public void run() {
                        hometwox.btnctwo.performClick();

                    }
                });
    }
});

        return rootView;



    }
}

hometwo.java

public class hometwo extends Fragment {
    Button btnctwo;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.home, container, false);



        btnctwo =  rootView.findViewById(R.id.btnctwo);






btnctwo.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Log.e("testler","testlertwo");

    }
});

        return rootView;



    }



}

日志猫

2020-05-18 11:17:54.907 11290-11290/com.sahnartsappone.sahnartsapp E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.sahnartsappone.sahnartsapp, PID: 11290
    java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.widget.Button.post(java.lang.Runnable)' on a null object reference
        at com.sahnartsappone.sahnartsapp.home$1.onClick(home.java:30)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)

为什么performClick()方法不起作用? 我哪里出错了?

最佳答案

问题出在这里:

hometwo hometwox = new hometwo();

        hometwox.btnctwo
                .post...

如果您只创建 fragment ,它将无法到达 onCreateView 方法,因此它不会从 hometwox 注入(inject) btnctwo 按钮 View 中的按钮实例(因为不会有任何 View )。因此基本上您将在空引用上调用 post 方法。

因此解决方案是使用如下方式渲染 fragment :

 FragmentTransaction transaction = this.fragmentManager.beginTransaction();
        transaction.replace(R.id.frame_container, fragment);
        transaction.addToBackStack(null);
        transaction.commit();

关于java - PerformClick()方法返回错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61865570/

相关文章:

java - 我可以在 res/values/styles.xml 中使用来自 Java 类的静态变量吗?

java - Android - 微调器 + setOnClickListener

android - 为什么当我使用 setClickable(true) 它不显示点击 Action

android - 自定义按钮的 ClickListener

java - 错误 : java: cannot access org. openqa.selenium.HasInputDevices 找不到 org.openqa.selenium.HasInputDevices 的类文件

java - 尝试编写 Spring Batch 单元测试时出现 NoSuchBeanDefinitionException

java - com.mysql.jdbc.exception.jdbc4.CommunicationsException : The last packet successfully received from the server was

android - 我可以在 Android 库模块中使用 Firebase 远程配置并仍然允许库使用者使用它吗?

java - GPS 启用检查后销毁并重新启动应用程序

java - Android 上的点对点音频通话 : Voice breaks and lag(delay in receiving packets) increases