我有一个按钮,我通过代码附加了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);
}
};
}
答案 0 :(得分:1)
解决了问题!在纵向模式下,像其他人一样,我在一个单独的活动中加载一个片段。出于习惯,我在加载片段之前调用了setContentView(something)!所以最终这两个布局相互重叠,可见和不可见的按钮相互重叠,事情必定搞砸了。该死的,我不确定我是否喜欢片段的概念。我第一次使用它们。但也许我只需要在习惯之前学习如何正确连接它们:)非常感谢你的帮助
答案 1 :(得分:0)
我猜是
1)你是否再次为setOnClickForSaveButton中传递的视图找到ViewById?因为旧视图将被销毁,并且在更改屏幕方向时将创建视图 2)你有R.id.change_funds_save的多个id 3)在onclick(v)的第一行添加一个日志,看它是否被调用但是转到另一个你没想到的分支。
答案 2 :(得分:0)
除非您从layout-land
和layout-port
加载两个单独的xml布局文件,否则横向模式和纵向模式之间不应该有太大区别。话虽这么说,我会猜测并说你的应用程序可能由于配置更改而无法正常工作。如果这确实是真的,请告诉我...即您的应用程序最初是否正常工作,但是当您旋转屏幕时停止工作?
如果是这样,您应该查看活动生命周期如何影响您的观看次数和onClickListener
。