按钮单击不会更改textview值

时间:2013-03-13 06:32:54

标签: android eclipse textview

这是XML代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:text="Your total is 0"
    android:textSize="20dp" />

<Button
    android:id="@+id/button2"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/button1"
    android:layout_centerVertical="true"
    android:text="Subtract one"
    android:textSize="20dp" />

<Button
    android:id="@+id/button1"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:layout_below="@+id/textView1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="62dp"
    android:text="Add one"
    android:textSize="20dp" />

这是java代码:

package com.example.helloworld;

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

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

int counter;
Button add, sub;
TextView display;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    counter = 0;
    add = (Button) findViewById(R.id.button1);
    sub = (Button) findViewById(R.id.button2);
    display = (TextView) findViewById(R.id.textView1);
    add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            counter++;

            display.setText("Your total is " + counter);
        }
    });

    sub.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            counter--;

            display.setText("Your total is " + counter);
        }
    });

    return true;
}

}

当我按下按钮时,文本视图文本根本没有任何变化。

请帮忙。我希望显示器在添加或减去后根据按下的按钮显示计数器的值。

5 个答案:

答案 0 :(得分:2)

您已将代码放在错误的位置。你没有在这里处理菜单,所以你不需要放入你的public boolean onCreateOptionsMenu(Menu menu) {}按钮就不会有任何动作/火灾

移动这个

counter = 0;
    add = (Button) findViewById(R.id.button1);
    sub = (Button) findViewById(R.id.button2);
    display = (TextView) findViewById(R.id.textView1);
    add.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            counter++;

            display.setText("Your total is " + counter);
        }
    });

    sub.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            counter--;

            display.setText("Your total is " + counter);
        }
    });

到你的onCreate()方法并尝试再次运行

答案 1 :(得分:0)

<强>问题:

android documentation本身表示应该在onCreate中使用findViewById

  

onCreate(Bundle)是初始化活动的地方。最   重要的是,在这里你通常会用一个调用setContentView(int)   布局资源定义您的UI,并使用findViewById(int)来   检索该UI中需要与之交互的小部件   编程。

但是你在CreateOptionsMenu中使用它们。执行以下步骤:

首先将这些声明设为类级别:

public class MainActivity extends Activity {
int counter;
  Button add, sub;
 TextView display;
//......more code below

将此段代码移至onCreate(Bundle savedInstanceState) {而不是onCreateOptionsMenu(Menu menu) {。特别是计数器代码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

   //assigning initial value to counter

 counter = 0;//counter set

//getting the controls

    add = (Button) findViewById(R.id.button1);
    sub = (Button) findViewById(R.id.button2);
    display = (TextView) findViewById(R.id.textView1);

//setting Listeners

    add.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        counter++;

        display.setText("Your total is " + counter);
    }
});

sub.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        counter--;

        display.setText("Your total is " + counter);
    }
});
}

答案 2 :(得分:0)

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        counter = 0;
        add = (Button) findViewById(R.id.button1);
        sub = (Button) findViewById(R.id.button2);
        display = (TextView) findViewById(R.id.textView1);
        add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                counter++;

                display.setText("Your total is " + counter);
            }
        });

        sub.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                counter--;

                display.setText("Your total is " + counter);
            }
        });

    }

    int counter;
    Button add, sub;
    TextView display;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);

        return true;
    }
}

答案 3 :(得分:0)

onCreate方法中的所有内容都不在onCreateOptionsMenu中,如下所述

//代码

int counter;
Button add, sub;
TextView display;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

counter = 0;
add = (Button) findViewById(R.id.button1);
sub = (Button) findViewById(R.id.button2);
display = (TextView) findViewById(R.id.textView1);
add.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        counter++;

        display.setText("Your total is " + counter);
    }
});

sub.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        counter--;

        display.setText("Your total is " + counter);
    }
});


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {

return true;
}

}

答案 4 :(得分:0)

您必须在onCreate方法中执行任务。 onCreateOptionsMenu(菜单菜单)方法用于在选项菜单中执行任务。所以在onCreate方法中替换你的代码。 完整的代码如下。替换它并尝试。希望它能工作:)

      package com.example.helloworld;

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

        public class MainActivity extends Activity {

int counter;
Button add, sub;
TextView display;

   @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
    counter = 0;
   add = (Button) findViewById(R.id.button1);
   sub = (Button) findViewById(R.id.button2);
   display = (TextView) findViewById(R.id.textView1);
   add.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        counter++;

        display.setText("Your total is " + counter);
    }
});

sub.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        counter--;

        display.setText("Your total is " + counter);
    }
});
}



     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
     // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);


       return true;
   }

  }