隐藏和显示单个菜单按钮

时间:2011-10-06 22:34:02

标签: android view menu

我有一个Android类的项目,所以我还在学习,这应该是一个基本问题。我们得到了一个小费计算器并且已经做了一些修改,现在我们必须添加一个菜单。

启动时,它将处于多人模式。为您希望帐单拆分的人数提供一个文本框和文本字段。当您点击菜单时,它应显示单人模式,该模式消除了文本框和文本字段。然后菜单会更改为在菜单中显示多人模式按钮。

我已经完成了所有工作,除了它显示两个按钮,我无法弄清楚如何暂时隐藏按钮。主要错误是:

无法在基本类型int

上调用setVisibility(int)

声明:

multiple_button.setVisibility(View.GONE);

我已经尝试了隐藏我能想到的按钮的每一种组合,并认为上述行是正确的,但不确定如何使其工作。

one_person_button = View.VISIBLE;
    multiple_button = View.GONE;

我在代码中有这个,但它也没有做任何事情。

非常感谢任何帮助。

编辑:代码。我已阅读了该链接,但考虑到我没有OnPrepareOptions部分,我需要重新阅读它

package com.android;


import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Button;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;

public class tipcalc extends Activity
{

    public static int one_person_button = Menu.FIRST;
    private int multiple_button = Menu.FIRST +1;
    static final private int reset_button = Menu.FIRST +2;
    private static final int MENU_ITEM = 0;

    private EditText txtbillamount;
    private EditText txtpeople;
    private EditText txtpercentage;

    private TextView txtperperson;
    private TextView txttipamount;
    private TextView txttotal;

    private Button btncalculate;
    private Button btnreset;

    private double billamount = 0;
    private double percentage = 0;
    private double numofpeople=0; 
    private double tipamount = 0;
    private double totaltopay = 0;
    private double perperson = 0;
    private View view; 


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initControls();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        MenuItem itemOne = menu.add(0, one_person_button, Menu.NONE,
                R.string.one_person);
        MenuItem itemMultiple = menu.add(1, multiple_button, Menu.NONE,
                R.string.multiple);



        MenuItem itemReset = menu.add(2, reset_button, Menu.NONE,
                                    R.string.reset);

        itemOne.setIcon(R.drawable.ic_menu_invite);
        itemMultiple.setIcon(R.drawable.ic_menu_allfriends);
        itemReset.setIcon(R.drawable.ic_menu_refresh);

        one_person_button.setGroupVisible(0, true);
        multiple_button.setVisibility(View.GONE);
        one_person_button = View.VISIBLE;
        multiple_button = View.GONE;

        return true;
    }


    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        if (one_person_button == View.VISIBLE) {
             ((TextView)findViewById(R.id.txtpeople)).setVisibility(View.INVISIBLE) ;
             ((TextView)findViewById(R.id.widget30)).setVisibility(View.INVISIBLE) ;
             multiple_button = View.VISIBLE;
             one_person_button = View.GONE;
             numofpeople = 1; }
        else if (multiple_button == View.VISIBLE) {
             ((TextView)findViewById(R.id.txtpeople)).setVisibility(View.VISIBLE) ;
             ((TextView)findViewById(R.id.widget30)).setVisibility(View.VISIBLE) ;
             multiple_button = View.GONE;
             one_person_button = View.VISIBLE;
        }
        return false;
    }

    private void initControls()
    {
        txtbillamount = (EditText)findViewById(R.id.txtbillamount);
        txtpeople = (EditText)findViewById(R.id.txtpeople);
        txtperperson=(TextView)findViewById(R.id.txtperperson);
        txttipamount=(TextView)findViewById(R.id.txttipamount);
        txttotal=(TextView)findViewById(R.id.txttotal);

        btncalculate = (Button)findViewById(R.id.btncalculate);
        btnreset = (Button)findViewById(R.id.btnreset);

        btncalculate.setOnClickListener(new Button.OnClickListener() { public void onClick (View v){ calculate(); }});
        btnreset.setOnClickListener(new Button.OnClickListener() { public void onClick (View v){ reset(); }});

    }

    private void calculate()
    {
    billamount=Double.parseDouble(txtbillamount.getText().toString()); 
    numofpeople=Double.parseDouble(txtpeople.getText().toString());    



        RadioButton poorButton = (RadioButton) findViewById(R.id.radioButton1);
        RadioButton goodButton = (RadioButton) findViewById(R.id.radioButton2);
        RadioButton excellentButton = (RadioButton) findViewById(R.id.radioButton3);

    if (poorButton.isChecked()){
       percentage = Double.parseDouble(poorButton.getText().toString());
    } else if (goodButton.isChecked()){
        percentage = Double.parseDouble(goodButton.getText().toString());
    } else if (excellentButton.isChecked()){
        percentage = Double.parseDouble(excellentButton.getText().toString());
    }




    tipamount=(billamount*percentage)/100;
    totaltopay=billamount+tipamount;
    perperson=totaltopay/numofpeople;

    txttipamount.setText(Double.toString(tipamount));
    txttotal.setText(Double.toString(totaltopay));
    txtperperson.setText(Double.toString(perperson));        
    }

    private void reset()
    {
    txtbillamount.setText("");
    txtpeople.setText("");

    txtperperson.setText("");
    txttipamount.setText("");
    txttotal.setText("");
    }
}

2 个答案:

答案 0 :(得分:0)

发布所有相关源代码。没有它,我们无法就出现问题的方式给出具体建议。

我可以告诉你,虽然你需要覆盖onPrepareOptionsMenu()并在那里,你要检查你的模式,并使正确的按钮可见。但是你需要调用setVisibility(View.VISIBLE);在对按钮小部件的引用上,而不是对int。

This page holds the answer to your questions.

答案 1 :(得分:-1)

尝试使用8

调用setVisibility