2013-03-13 2 views
4

Это код XML:нажатие кнопки не изменить значение TextView

<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; 
} 

} 

При нажатии кнопки ничего не происходит с текст текста вообще.

Пожалуйста, помогите. Я хочу, чтобы на дисплее отображалось значение счетчика после добавления или вычитания в зависимости от того, какая кнопка была нажата.

+0

Вы получаете какие-либо сбои? Если я не верю, что ваша функция onCreateOptionsMenu не будет вызвана. – Triode

+0

Посмотрите на мое решение. – Nezam

ответ

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() метод и попробовать чтобы запустить его снова

+0

Спасибо тонну. Мое первое приложение теперь работает. –

+0

@AshishGarg добро пожаловать. Если этот ответ поможет вам просто принять его и проголосовать. Спасибо –

0

ПРОБЛЕМА:

сам андроид documentation говорит, что один должен использовать findViewById в самой OnCreate:

OnCreate (Bundle), где вы инициализировать вашу деятельность. В большинстве случаев здесь обычно вызывается setContentView (int) с ресурсом макета , определяющим ваш пользовательский интерфейс, и используя findViewById (int) до , извлекает виджеты в этом пользовательском интерфейсе, которые вам необходимо взаимодействовать с программным обеспечением .

Но вы их используете в CreateOptionsMenu.Perform эти шаги:

На первом уровне делают эти заявления класса:

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); 
    } 
}); 
} 
+0

Большое спасибо. Теперь мое приложение работает. –

+0

Рад это знать. Если мой ответ помог решить вашу проблему, отметьте его как ответ. – Nezam

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; 
    } 
} 
+0

Вы должны поместить свой код в метод oncreate, а не onCreateOptionsMenu – duggu

+0

Можете ли вы объяснить? очень заинтересованы в объяснении – Triode

+0

Посмотрите на мое объяснение проблемы. – Nezam

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; 
} 

} 
+0

, почему он должен вызвать getMenuInflater() в методе onCreate()? – shaonAshraf

+0

Спасибо. Мое приложение теперь работает. Yipee. –

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; 
    } 

    } 

+0

Большое спасибо. Приложение теперь работает на моем телефоне. –

Смежные вопросы