seVoid类型不能在onClickListener中使用

问题描述 投票:0回答:4

我想在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;}
}
java android
4个回答
0
投票
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;}
}

0
投票

您当前的尝试无效,因为您正在调用该方法。 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,因为这似乎是您要尝试的在这里做。


0
投票

我认为您的代码可以进行一些编辑,您可以通过以下方式对其进行修改:

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的答案


0
投票

您应该将监听器设置为按钮:

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
© www.soinside.com 2019 - 2024. All rights reserved.