初学者 - 在findViewById内和字符串或textview赋值中连接变量的语法

时间:2017-02-09 17:39:52

标签: java android concatenation

我是初学Android编程的人,经验很少,我会尝试提出正确的问题,但如果我的一些理解不是很划清,我会道歉。

我正在使用按钮0到9构建一个基本的计算器应用程序。用户可以使用它们将该特定数字输入到文本字段中。

我有相同的代码片段(如下)为所有0到9个按钮执行我的按钮操作。只是在哪里看到数字1它被替换为按钮相关的数字。

    label.nostate.selected {
    background-color: white;
    color: white;

所以我正在编写一个相同代码的子程序,然后我可以调用相关按钮。

        Button button1 = (Button) findViewById(R.id.button_calc_1);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String number_1 = ("1");
            TextView  Insert_Number_1 = (TextView ) findViewById(R.id.editTextoutput);
            TextView Insert_Number_1_view = (TextView) findViewById(R.id.CurrentDisplay);
            Insert_Number_1.append(number_1);
            Insert_Number_1_view.append(number_1);

        }
    });

请记住这是一项正在进行的工作。

我的问题基本上是如何将变量数字按钮添加到button_calc_(此处插入数字按钮)

编辑:

好的,从第二段代码开始。我想在findViewById(R.id.button_calc_1)中使用numberbuttons变量。

所以在我脑海里,我想象这样。

        public String numberbuttons(String value){
    Button button1 = (Button) findViewById(R.id.button_calc_1);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String number_1 = ("1");
            TextView  Insert_Number_1 = (TextView ) findViewById(R.id.editTextoutput);
            TextView Insert_Number_1_view = (TextView) findViewById(R.id.CurrentDisplay);
            Insert_Number_1.append(number_1);
            Insert_Number_1_view.append(number_1);

        }
    });

}

当我调用textview时也一样。我想象这样。

findViewById(R.id.button_calc_+(numberbuttons);  

1 个答案:

答案 0 :(得分:1)

findViewById()方法需要一个整数,而不是String,因此您不能只传入一个String,其中包含您尝试使用的按钮的名称。当您使用R.id.xxx时,您传递的是对资源的引用,实际上只是一个int。

为了达到你想要的效果,我建议使用某种类型的列表来存储按钮,然后循环浏览。请参阅下面的示例。

ArrayList<Button> buttons = new ArrayList<>();

buttons.add((Button) findViewById(R.id.button1)); //Do this for all the buttons.

for(Button b : buttons){
    b.setText("1"); //Do whatever you need to each button in here.
}

如果您想使用某种方法管理所有按钮,也可以这样做!

changeButton((Button) findViewById(R.id.button1));

private void changeButton(Button b){
    //Change the button
}

编辑:

如果我理解正确,请与您的问题更相关,为每个问题添加一个事件处理程序。

ArrayList<Button> buttons = new ArrayList<>();

buttons.add((Button) findViewById(R.id.button1)); //Do this for all the buttons.

for(int i = 0; i < buttons.size(); i++){
    Button b = buttons.get(i);
    button1.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        String number = String.valueOf(i);
        TextView  Insert_Number_1 = (TextView ) findViewById(R.id.editTextoutput);
        TextView Insert_Number_1_view = (TextView) findViewById(R.id.CurrentDisplay);
        Insert_Number_1.append(number_1);
        Insert_Number_1_view.append(number_1);

    }
});
}