0

我有一个按钮,我通过代码将 onClickListener 附加到该按钮。我必须通过代码来解决这个问题,因为它在一个片段中。

监听器在横向模式下工作正常,但在纵向模式下却不行。甚至没有“咔哒”声。

在我的 xml 文件中,我将按钮的初始可见性设置为不可见,然后在用户单击与按钮相同的视图组中的单选按钮时使其可见。单选按钮的 onclicklisteners 在纵向和横向模式下都可以正常工作。

现在,如果我删除 xml 中的“android:visibility="invisible" 代码,onclicksener 在纵向模式下工作正常!但当然我需要它在用户单击单选按钮之前不可见,否则 UI 没有意义。确实很奇怪.

这是我的代码:

private void setOnClickForSaveButton(View v) {

        Button changeFundsSave = (Button) v.findViewById(R.id.change_funds_save);
        changeFundsSave.setOnClickListener(saveListener);

    }

Button.OnClickListener saveListener = new Button.OnClickListener() {

        @Override
        public void onClick(View v) {

            //Get the rootview
            View rootView = v.getRootView();

            EditText changeFundsEdit = (EditText) rootView.findViewById(R.id.change_funds_edit);

            if(changeFundsEdit.getText().toString().equals("")) {
                new AlertDialog.Builder(getActivity())
                .setTitle( "" )
                .setMessage( "Enter the number of units" )
                .setPositiveButton( "Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {


                    }
                })
                .show();
                return;


            }


        }
    };


    private void setOnClicksForRadioButtons(View v) {

        RadioButton rb1 = (RadioButton)v.findViewById(R.id.add_units);
        RadioButton rb2 = (RadioButton)v.findViewById(R.id.remove_units);
        RadioButton rb3 = (RadioButton)v.findViewById(R.id.set_units);

        rb1.setOnClickListener(addRemoveSetButtonListener);
        rb2.setOnClickListener(addRemoveSetButtonListener);
        rb3.setOnClickListener(addRemoveSetButtonListener);

    }





    OnClickListener addRemoveSetButtonListener = new OnClickListener() {

        @Override
        public void onClick(View v) {

            // Since we only have the radiobutton view, we need to get the parent
            View rootView = v.getRootView();

            //Make the controls visible
            TextView changeFundsText = (TextView) rootView.findViewById(R.id.change_funds_text);
            EditText changeFundsEdit = (EditText) rootView.findViewById(R.id.change_funds_edit);
            Button changeFundsSave = (Button) rootView.findViewById(R.id.change_funds_save);

            changeFundsText.setVisibility(View.VISIBLE);
            changeFundsEdit.setVisibility(View.VISIBLE);
            changeFundsSave.setVisibility(View.VISIBLE);


        }

    };


}
4

3 回答 3

1

解决了问题!在纵向模式下,像其他人一样,我在单独的活动中加载一个片段。出于习惯,我在加载片段之前调用了 setContentView(something) !所以最终这两种布局相互重叠,可见和不可见的按钮相互重叠,事情一定搞砸了。该死的,我不确定我是否喜欢碎片的概念。我第一次使用它们。但也许我只需要在习惯它们之前学习如何正确连接它们:) 非常感谢你的帮助

于 2012-05-31T15:20:41.213 回答
0

我的猜测是

1)你是否再次为你在setOnClickForSaveButton中传递的视图findViewById?因为旧视图将被销毁,并且当您更改屏幕方向时将创建一个视图 2)您是否有多个 R.id.change_funds_save 的 ID 3)在 onclick(v) 的第一行添加一个日志以查看它是否是打电话但转到另一个你没想到的分支。

于 2012-05-30T20:23:04.513 回答
0

除非您从layout-land和加载两个单独的 xml 布局文件layout-port,否则横向模式和纵向模式之间应该没有太大区别。话虽如此,我会大胆猜测并说您的应用程序可能由于配置更改而无法正常工作。让我知道这是否真的是真的......即您的应用程序一开始是否工作,但在您旋转屏幕时停止工作?

如果这是真的,您应该研究 Activity 生命周期如何影响您的视图和onClickListeners。

于 2012-05-30T20:30:47.023 回答