按钮未在纵向模式下单击

时间:2012-05-30 20:12:29

标签: android

我有一个按钮,我通过代码附加了onClickListener。我必须通过代码,因为它在一个片段中。

在横向模式下,侦听器工作正常,但在纵向模式下则不然。甚至没有“咔嗒”声。

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

现在如果我删除xml中的“android:visibility =”隐形“代码,onclickstener在纵向模式下工作正常!但当然我需要它隐身,直到用户点击一个单选按钮,否则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);


        }

    };


}

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

我猜是

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

答案 2 :(得分:0)

除非您从layout-landlayout-port加载两个单独的xml布局文件,否则横向模式和纵向模式之间不应该有太大区别。话虽这么说,我会猜测并说你的应用程序可能由于配置更改而无法正常工作。如果这确实是真的,请告诉我...即您的应用程序最初是否正常工作,但是当您旋转屏幕时停止工作?

如果是这样,您应该查看活动生命周期如何影响您的观看次数和onClickListener