Google Android - это несложно

Добро пожаловать на форум сайта startandroid.ru
Текущее время: 17 ноя 2018, 18:28

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 264 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14
Автор Сообщение
СообщениеДобавлено: 26 фев 2017, 19:11 

Зарегистрирован: 26 фев 2017, 19:01
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Iosif писал(а):
Не появляется меню с очисткой полей и выхода из приложения, подскажите, что не так сделал:


.............................

public class MainActivity extends Activity implements View.OnClickListener {

EditText etNum1;
EditText etNum2;

Button btnAdd;
Button btnSub;
Button btnMult;
Button btnDiv;

TextView tvResult;

String oper = "";
final int MENU_RESET_ID = 1;
final int MENU_QUIT_ID = 2;

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

// находим элементы
etNum1 = (EditText) findViewById(R.id.etNum1);
etNum2 = (EditText) findViewById(R.id.etNum2);

btnAdd = (Button) findViewById(R.id.btnAdd);
btnSub = (Button) findViewById(R.id.btnSub);
btnMult = (Button) findViewById(R.id.btnMult);
btnDiv = (Button) findViewById(R.id.btnDiv);

tvResult = (TextView) findViewById(R.id.tvResult);

// прописываем обработчик
btnAdd.setOnClickListener(this);
btnSub.setOnClickListener(this);
btnMult.setOnClickListener(this);
btnDiv.setOnClickListener(this);

}
// создание меню
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, MENU_RESET_ID, 0, "Reset");
menu.add(0, MENU_QUIT_ID, 0, "Quit");
return super.onCreateOptionsMenu(menu);
}
...............................


Ты код создания меню и инициализации обработчика нажатий на пункты забросил в OnClickListener, следовательно
оно будет инициализировано при каждом нажатии на кнопки. Наверное правильнее вот так :
Код: [ Загрузить ] [ Скрыть ]
  1.    /** Called when the activity is first created. */ 
  2.     @Override 
  3.     public void onCreate(Bundle savedInstanceState) { 
  4.         super.onCreate(savedInstanceState); 
  5.         setContentView(R.layout.activity_main); 
  6.  
  7.         // находим элементы 
  8.         etNum1 = (EditText) findViewById(R.id.etNum1); 
  9.         etNum2 = (EditText) findViewById(R.id.etNum2); 
  10.  
  11.         btnAdd = (Button) findViewById(R.id.btnAdd); 
  12.         btnSub = (Button) findViewById(R.id.btnSub); 
  13.         btnMult = (Button) findViewById(R.id.btnMult); 
  14.         btnDiv = (Button) findViewById(R.id.btnDiv); 
  15.  
  16.         tvResult = (TextView) findViewById(R.id.tvResult); 
  17.  
  18.         // прописываем обработчик 
  19.         btnAdd.setOnClickListener(this); 
  20.         btnSub.setOnClickListener(this); 
  21.         btnMult.setOnClickListener(this); 
  22.         btnDiv.setOnClickListener(this); 
  23.  
  24.     } 
  25.  
  26.     @Override 
  27.     public void onClick(View v) { 
  28.         // TODO Auto-generated method stub 
  29.         float num1 = 0; 
  30.         float num2 = 0; 
  31.         float result = 0; 
  32.  
  33.         // Проверяем поля на пустоту 
  34.         if (TextUtils.isEmpty(etNum1.getText().toString()) 
  35.                 || TextUtils.isEmpty(etNum2.getText().toString()))    { 
  36.             return; 
  37.         } 
  38.  
  39.         // читаем EditText и заполняем переменные числами 
  40.         num1 = Float.parseFloat(etNum1.getText().toString()); 
  41.         num2 = Float.parseFloat(etNum2.getText().toString()); 
  42.         if( num2 == 0 ){ 
  43.             Toast.makeText(this,"БЕСКОНЕЧНОСТЬ ОДНАКО ПОЛУЧАЕТСЯ!  ",Toast.LENGTH_LONG).show(); 
  44.  
  45.           return; 
  46.         } 
  47.         // определяем нажатую кнопку и выполняем соответствующую операцию 
  48.         // в oper пишем операцию, потом будем использовать в выводе 
  49.         switch (v.getId()) { 
  50.             case R.id.btnAdd: 
  51.                 oper = "+"; 
  52.                 result = num1 + num2; 
  53.                 break; 
  54.             case R.id.btnSub: 
  55.                 oper = "-"; 
  56.                 result = num1 - num2; 
  57.                 break; 
  58.             case R.id.btnMult: 
  59.                 oper = "*"; 
  60.                 result = num1 * num2; 
  61.                 break; 
  62.             case R.id.btnDiv: 
  63.                 oper = "/"; 
  64.                 result = num1 / num2; 
  65.                 break; 
  66.             default: 
  67.                 break; 
  68.         } 
  69.  
  70.         // формируем строку вывода 
  71.         tvResult.setText(num1 + " " + oper + " " + num2 + " = " + result); 
  72.     } 
  73.     // создание меню 
  74.     @Override 
  75.     public boolean onCreateOptionsMenu(Menu menu) { 
  76.         menu.add(0, MENU_RESET_ID, 0, "Reset"); 
  77.         menu.add(0, MENU_QUIT_ID, 0, "Quit"); 
  78.         return super.onCreateOptionsMenu(menu); 
  79.     } 
  80.  
  81.     // обработка нажатий на пункты меню 
  82.     @Override 
  83.     public boolean onOptionsItemSelected(MenuItem item) { 
  84.         switch (item.getItemId()) { 
  85.             case MENU_RESET_ID: 
  86.                 // очищаем поля 
  87.                 etNum1.setText("0000"); 
  88.                 etNum2.setText(""); 
  89.                 tvResult.setText(""); 
  90.                 break; 
  91.             case MENU_QUIT_ID: 
  92.                 // выход из приложения 
  93.                 finish(); 
  94.                 break; 
  95.         } 
  96.         return super.onOptionsItemSelected(item); 
  97.     } 
  98.  
  99.  
  100.  
  101.  
  102.  


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 24 июн 2017, 01:10 

Зарегистрирован: 24 июн 2017, 01:06
Сообщений: 1
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Немного переписал с использованием ButterKnife, если кому-то интересно

Код: [ Загрузить ] [ Скрыть ]
  1. package ru.petrash.p0191simplecalc; 
  2.  
  3. import android.support.v7.app.AppCompatActivity; 
  4. import android.os.Bundle; 
  5. import android.text.TextUtils; 
  6. import android.view.Menu; 
  7. import android.view.MenuItem; 
  8. import android.widget.Button; 
  9. import android.widget.EditText; 
  10. import android.widget.TextView; 
  11. import android.widget.Toast; 
  12.  
  13. import java.util.List; 
  14.  
  15. import butterknife.BindView; 
  16. import butterknife.BindViews; 
  17. import butterknife.ButterKnife; 
  18. import butterknife.OnClick; 
  19.  
  20. public class MainActivity extends AppCompatActivity { 
  21.  
  22.     @BindViews({R.id.etNum1, R.id.etNum2}) 
  23.     List<EditText> etNums; 
  24.     @BindViews({R.id.btnAdd, R.id.btnDiv, R.id.btnMult, R.id.btnSub}) 
  25.     List<Button> btns; 
  26.     @BindView(R.id.tvResult) 
  27.     TextView tvResult; 
  28.  
  29.     String oper = ""; 
  30.  
  31.     final int MENU_RESET_ID = 1; 
  32.     final int MENU_QUIT_ID = 2; 
  33.  
  34.     @Override 
  35.     protected void onCreate(Bundle savedInstanceState) { 
  36.         super.onCreate(savedInstanceState); 
  37.         setContentView(R.layout.activity_main); 
  38.         ButterKnife.bind(this); 
  39.     } 
  40.  
  41.     @OnClick({R.id.btnAdd, R.id.btnDiv, R.id.btnMult, R.id.btnSub}) //без Listener'ов вешает OnClick на переданные объекты 
  42.     public void onClick(Button b) { 
  43.         float num1 = 0; 
  44.         float num2 = 0; 
  45.         float res = 0; 
  46.         for (int i = 0; i < etNums.size(); i++) { 
  47.             if (TextUtils.isEmpty(etNums.get(i).getText().toString())) { 
  48.                 return; 
  49.             } 
  50.         } 
  51.         num1 = Float.parseFloat(etNums.get(0).getText().toString()); 
  52.         num2 = Float.parseFloat(etNums.get(1).getText().toString()); 
  53.  
  54.         switch (b.getId()) { 
  55.             case R.id.btnAdd: 
  56.                 oper = "+"; 
  57.                 res = num1 + num2; 
  58.                 break; 
  59.             case R.id.btnSub: 
  60.                 oper = "-"; 
  61.                 res = num1 - num2; 
  62.                 break; 
  63.             case R.id.btnMult: 
  64.                 oper = "*"; 
  65.                 res = num1 * num2; 
  66.                 break; 
  67.             case R.id.btnDiv: 
  68.                 oper = "/"; 
  69.                 if (!checkDivideByZero(num2)) { 
  70.                     return; 
  71.                 } else res = num1 / num2; 
  72.                 break; 
  73.             default: 
  74.                 break; 
  75.         } 
  76.         tvResult.setText(num1 + " " + oper + " " + num2 + " " + " = " + res); 
  77.     } 
  78.  
  79.     @Override 
  80.     public boolean onCreateOptionsMenu(Menu menu) { 
  81.         menu.add(0, MENU_RESET_ID, 0, "Reset"); 
  82.         menu.add(0, MENU_QUIT_ID, 0, "Quit"); 
  83.  
  84.         return super.onCreateOptionsMenu(menu); 
  85.     } 
  86.  
  87.     @Override 
  88.     public boolean onOptionsItemSelected(MenuItem item) { 
  89.         switch (item.getItemId()) { 
  90.             case MENU_RESET_ID: 
  91.                 clearAll(); 
  92.                 break; 
  93.             case MENU_QUIT_ID: 
  94.                 finish(); 
  95.                 break; 
  96.         } 
  97.         return super.onOptionsItemSelected(item); 
  98.     } 
  99.     //отдельно вынес проверку деления на 0 и очистку полей 
  100.     private boolean checkDivideByZero(float n) { 
  101.         if (n == 0.00) { 
  102.             Toast.makeText(this, "Divide by zero is not allowed", Toast.LENGTH_LONG).show(); 
  103.             clearAll(); 
  104.             return false; 
  105.         } else return true; 
  106.     } 
  107.  
  108.     private void clearAll() { 
  109.         tvResult.setText(""); 
  110.         for (EditText e : etNums 
  111.                 ) { 
  112.             e.setText(""); 
  113.         } 
  114.     } 
  115.  


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 июн 2018, 15:40 

Зарегистрирован: 26 июн 2018, 15:19
Сообщений: 1
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Не могу создать меню, в MainActivity прописываю:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 1, 0, "Очистить");
menu.add(0, 2, 0, "Выйти");
return super.onCreateOptionsMenu(menu);
}
компилятор ошибок не выдает, запускает "калькулятор", все работает, но нет меню..
Пробовал разные варианты, копировал код с урока, результат тот же.
Добавил два "баттона" вместо меню, ушел в следующий урок, но очень любопытно почему не вижу меню, помогите разобраться.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сегодня, 09:39 

Зарегистрирован: 11 сен 2018, 08:48
Сообщений: 2
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Приложение отсутствует в эмуляции. Вот, на всякий случай, манифест.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.startandroid.new_calc">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 264 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB