Почему активность не меняется при нажатии кнопки?

Когда вы пытались изменить активность одним нажатием кнопки, я обнаружил, что вам нужно использовать Intent. Но при использовании в моем коде это не работает. Есть ли проблемы с кодом, который у меня есть?

  public class SearchActivity extends Activity implements OnClickListener{

    private ListView recipes;
    Intent intent;
    Button button;
    EditText input;

    public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);

          setContentView(R.layout.searchlist);

          //EditText input = (EditText)findViewById(R.id.recipeName);
          button = (Button)findViewById(R.id.submit);
          input = (EditText)findViewById(R.id.recipeName);

          //recipes = (ListView)findViewById(R.id.recipes);
          //recipes.setAdapter(new ArrayAdapter<String> (this, R.layout.main, getResources().getStringArray(R.array.BaconSandwich)));
          button.setOnClickListener(this);
      }

      public void onClick(View clicked) {

          String value = input.getText().toString();
          Toast.makeText(this, value, Toast.LENGTH_SHORT).show();

          if(clicked == button) {
            recipes = (ListView)findViewById(R.id.recipes);
            Toast.makeText(this, "It is working for this item.", Toast.LENGTH_SHORT).show();
            Intent i = new Intent(SearchActivity.this, RecipeMethodActivity.class);
            SearchActivity.this.startActivity(i);
          }
      }

Я не уверен, что это просто ошибка именования, или то, как я это называю, неверно. Любая помощь будет здорово.

Также я добавил действие, которое хочу изменить (RecipeMethodActivity) в манифест Android.


person James Michael Lucas    schedule 30.04.2012    source источник
comment
Вы видите оба своих Toast, когда нажимаете кнопку?   -  person Bobbake4    schedule 01.05.2012
comment
Что именно значит не работает? Прочтите: Что находится в LogCat? (В Eclipse: Окно -> Показать вид -> Android -> LogCat)   -  person nuala    schedule 01.05.2012
comment
Нет, на самом деле я вижу только первый тост, сейчас попробую удалить оператор if. Единственная проблема заключается в том, что я в конечном итоге хочу, чтобы приложение отправляло данные в зависимости от того, какое значение было добавлено в текстовое поле.   -  person James Michael Lucas    schedule 01.05.2012
comment
Для отправки данных с намерением взгляните на различные методы putExtra(). Если вам нужна дополнительная помощь, откройте новый вопрос для этого, как только намерение сработает :) developer.android.com/reference/android/content/   -  person nuala    schedule 01.05.2012
comment
К сожалению, удалив оператор if, он по-прежнему не изменит активность, а также всплывающее сообщение, которое я получаю, не соответствует тому, что было установлено, а скорее сообщению, которое было удалено.   -  person James Michael Lucas    schedule 01.05.2012
comment
Ответ ниже будет правильным способом справиться с этим. Однако в вашем вызове if(clicked == button) вам, вероятно, лучше использовать if( clicked.getID() == button.getID() )   -  person Drake Clarris    schedule 01.05.2012


Ответы (4)


Вам нужно проверить идентификатор представления в методе onClick, например:

public void onClick(View clicked) {

      String value = input.getText().toString();
      Toast.makeText(this, value, Toast.LENGTH_SHORT).show();

      if(clicked.getId() == R.id.submit) {
        recipes = (ListView)findViewById(R.id.recipes);
        Toast.makeText(this, "It is working for this item.", Toast.LENGTH_SHORT).show();
        Intent i = new Intent(SearchActivity.this, RecipeMethodActivity.class);
        SearchActivity.this.startActivity(i);
      }
  }
person David Scott    schedule 30.04.2012
comment
Я внес необходимые изменения, сначала удалил намерение и начало действия, и всплывающее уведомление работало нормально, создавая соответствующий текст. но когда я изменился и хотел изменить активность, приложение разбилось. Есть мысли от чего это может быть? Я вызываю начальное действие в правильном поместье? - person James Michael Lucas; 01.05.2012
comment
Когда он выйдет из строя, просто отредактируйте вопрос и опубликуйте ошибку, которую вы найдете в LogCat. - person nuala; 01.05.2012
comment
Извините, я вообще не понимаю Log Cat, но из того, что я могу понять, проблема заключается в onCreate(RecipeMethodActivity). Это действие ничего не делает и должно быть пустым. - person James Michael Lucas; 01.05.2012

В вашем методе onClick вы сравниваете, совпадают ли экземпляры двух объектов View. Ясно, что объект View, переданный вашему методу onClick, не является == частной переменной экземпляра Button button.

Вместо этого вам нужно сравнить их идентификаторы:

if (view.getId() == R.id.button)

person Alex Lockwood    schedule 30.04.2012
comment
Дэвид был быстрее, но этот ответ дает основу. - person nuala; 01.05.2012

Я никогда не пробовал тестировать представление с помощью clicked == button, но это должно работать в вашем onCreate():

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        Toast.makeText(this, "It is working for this item.", Toast.LENGTH_SHORT).show();
        Intent i = new Intent(SearchActivity.this, RecipeMethodActivity.class);
        SearchActivity.this.startActivity(i);
    }
});
person Sam    schedule 30.04.2012

person    schedule
comment
При таком подходе вам не нужно реализовывать onClickListener. Разница в том, что в этом подходе вы создаете новый слушатель для каждого элемента, на который можно щелкнуть, но если вы реализуете onClickListener, вам не нужно создавать экземпляр для каждого элемента, на который можно щелкнуть. - person vtuhtan; 01.05.2012