我想在setOnClickListener中使用的方法有问题。我希望它禁用其他两个按钮,它们位于另一个顶部。我有一个错误:
'void'类型在这里不允许。
问题出在哪里?
MainAcitivity:
public class MainActivity extends AppCompatActivity {
private RelativeLayout layout;
private Button countof1;
private Button countof10;
private Button countof100;
private int addto=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
layout = findViewById(R.id.mainlayout);
countof1 = findViewById(R.id.countoftoadd1);
countof10 = findViewById(R.id.countoftoadd10);
countof100 = findViewById(R.id.countoftoadd100);
countof1.setOnClickListener(changeAddButton(countof1, countof10, countof100, layout));
countof10.setOnClickListener(changeAddButton(countof1, countof10, countof100, layout));
countof100.setOnClickListener(changeAddButton(countof1, countof10, countof100, layout));
}
private void changeAddButton(Button button1, Button button10, Button button100, View view){
if(addto==1){
button1.setVisibility(view.GONE);
button10.setVisibility(view.VISIBLE);
button10.setVisibility(view.GONE);
this.addto=10;}
else if(addto==10){
button1.setVisibility(view.GONE);
button10.setVisibility(view.GONE);
button10.setVisibility(view.VISIBLE);
this.addto=100;}
else{
button1.setVisibility(view.VISIBLE);
button10.setVisibility(view.GONE);
button10.setVisibility(view.GONE);
this.addto=1;}
}
countof1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeAddButton(countof1,countof10,countof100, layout);
}
});
countof10.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeAddButton(countof1,countof10,countof100, layout);
}
});
countof100.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
changeAddButton(countof1,countof10,countof100, layout);
}
});
}
private void changeAddButton(Button button1, Button button10, Button button100, View view){
if(addto==1){
button1.setVisibility(view.GONE);
button10.setVisibility(view.VISIBLE);
button100.setVisibility(view.GONE);
this.addto=10;}
else if(addto==10){
button1.setVisibility(view.GONE);
button10.setVisibility(view.GONE);
button100.setVisibility(view.VISIBLE);
this.addto=100;}
else{
button1.setVisibility(view.VISIBLE);
button10.setVisibility(view.GONE);
button100.setVisibility(view.GONE);
this.addto=1;}
}
您当前的尝试无效,因为您正在调用该方法。 changeAddButton
不返回任何内容,因此您不能将其用作setOnClickListener
的参数,该参数需要View.OnClickListener
。
changeAddButton
似乎不需要参数,因为您每次都传递相同的字段。因此,您可以将changeAddButton
重写为:
private void changeAddButton(){
if(addto==1){
button1.setVisibility(view.GONE);
button10.setVisibility(view.VISIBLE);
button10.setVisibility(view.GONE);
this.addto=10;}
else if(addto==10){
button1.setVisibility(view.GONE);
button10.setVisibility(view.GONE);
button10.setVisibility(view.VISIBLE);
this.addto=100;}
else{
button1.setVisibility(view.VISIBLE);
button10.setVisibility(view.GONE);
button10.setVisibility(view.GONE);
this.addto=1;}
}
而不是调用它,而是创建一个OnClickListener
:
countof1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
MainActivity.this.changeAddButton();
}
});
// do this for the other countofXXXs
或者如果您是can use Java 8,
countof1.setOnClickListener(v -> changeAddButton());
编辑:
更仔细地查看代码,我觉得应该使用一个按钮,而不是使用三个按钮,并使用setText
将其文本从1更改为10,再更改为100,因为这似乎是您要尝试的在这里做。
我认为您的代码可以进行一些编辑,您可以通过以下方式对其进行修改:
setText
但是我认为实现这一目标的更好方法是这样的:
public class MainActivity extends AppCompatActivity {
private RelativeLayout layout;
private Button countof1;
private Button countof10;
private Button countof100;
private int addto=1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
layout = findViewById(R.id.mainlayout); //Please consider using standard notation: main_layout
countof1 = findViewById(R.id.countoftoadd1); //count_of_to_add_1
countof10 = findViewById(R.id.countoftoadd10); //so on
countof100 = findViewById(R.id.countoftoadd100);
countof1.setOnClickListener(changeAddButton);
countof10.setOnClickListener(changeAddButton);
countof100.setOnClickListener(changeAddButton);
}
private View.OnClickListener changeAddButton = new View.OnClickListener() {
@Override
public void onClick(View v) {
changeAddButtonMethod(countof1, countof10, countof100, layout);
}
};
private void changeAddButtonMethod(Button button1, Button button10, Button button100, View view){
if(addto==1){
button1.setVisibility(view.GONE);
button10.setVisibility(view.VISIBLE);
button10.setVisibility(view.GONE); //I think this should be changed to 'button100'
this.addto=10;}
else if(addto==10){
button1.setVisibility(view.GONE);
button10.setVisibility(view.GONE);
button10.setVisibility(view.VISIBLE); //Same as above
this.addto=100;}
else{
button1.setVisibility(view.VISIBLE);
button10.setVisibility(view.GONE);
button10.setVisibility(view.GONE); //Same as above
this.addto=1;}
}
}
或使用Ehsan msz的答案
您应该将监听器设置为按钮:
public class MainActivity extends AppCompatActivity {
private RelativeLayout layout;
private Button countof1;
private Button countof10;
private Button countof100;
private int addto = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
layout = findViewById(R.id.mainlayout); //Please consider using standard notation: main_layout
countof1 = findViewById(R.id.countoftoadd1); //count_of_to_add_1
countof10 = findViewById(R.id.countoftoadd10); //so on
countof100 = findViewById(R.id.countoftoadd100);
countof1.setOnClickListener(changeAddButton);
countof10.setOnClickListener(changeAddButton);
countof100.setOnClickListener(changeAddButton);
}
private View.OnClickListener changeAddButton = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (addto == 1) {
countof1.setVisibility(View.GONE);
countof10.setVisibility(View.VISIBLE);
countof100.setVisibility(View.GONE);
addto = 10;
} else if (addto == 10) {
countof1.setVisibility(View.GONE);
countof10.setVisibility(View.GONE);
countof100.setVisibility(View.VISIBLE);
addto = 100;
} else {
countof1.setVisibility(View.VISIBLE);
countof10.setVisibility(View.GONE);
countof100.setVisibility(View.GONE);
addto = 1;
}
}
};
}
并在活动中实施 countof1.setOnClickListener(this);
countof10.setOnClickListener(this);
countof100.setOnClickListener(this);
:
View.OnClickListener
对于此方法,您可以使用public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//...
countof1.setOnClickListener(this);
countof10.setOnClickListener(this);
countof100.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == countof1.getId() || id == countof10.getId() || id == countof100.getId()){
//call method here
}
}
}
,而无需传递switch
作为参数
View