2013-06-05 3 views
0

Я хочу что-то создать, если я напечатаю например «abc» в TextField, он откроет активность. если я набираю что-то еще, я не хочу, чтобы он открыл активность. Я уже что-то сделал, он работает в первый раз (это неправильно, если вы не ввели действительный ввод и он открывает страницу, если вы введете «abc». Я хочу, чтобы эта система с несколькими вариантами использовала «abc» и «abc», БББ». он работает в первый раз, но если я вернуться назад и ввести что-то еще он открывает ту же страницу, что и с первой попытки. Возможно, я должен отключить OnClickListener, но как?Снимите onClickListener после нажатия кнопки

это мой MainActivity.java

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

    final Button button = (Button) findViewById(R.id.button1); 
    final EditText textedit = (EditText) findViewById(R.id.editText1); 

    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 

      if ("abc".equals(textedit.getText().toString())) 
       button.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         Intent intent = new Intent (MainActivity.this, Schoen1.class); 
         startActivity(intent); 


        } 
       });     
      if ("bbb".equals(textedit.getText().toString())) 
       button.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         Intent i = new Intent (MainActivity.this, Schoen2.class); 
         startActivity(i); 

        } 
       }); 
      else 
       button.setText("wrong pass"); 

     } 
    }); 
} 


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

}

"Schoen1" и "Schoen2" мои страницы, чтобы открыть. Спасибо!

+0

Проверьте мой ответ. Это должно быть все, что вам нужно. Вам просто нужно переместить свои операторы 'if' внутри вашего' onClick' и нет необходимости в дополнительном 'listener' – codeMagic

ответ

0

Проблема: onClickListener() уже задан. Что вам нужно сделать, это переместить этот код в ваш onClick()

   @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
       if ("abc".equals(textedit.getText().toString())) 
       { 
         Intent intent = new Intent (MainActivity.this, Schoen1.class); 
         startActivity(intent); 
       } 
       else if ("bbb".equals(textedit.getText().toString())) 
       { 
         Intent i = new Intent (MainActivity.this, Schoen2.class); 
         startActivity(i); 
       } 
+0

@ user2320105 Где эти переменные' flag'? Я вижу, из приведенного выше ответа. Я не вижу, что хорошо делают эти флаги. Если вы используете мой ответ, вам не нужны никакие «флаги» – codeMagic

0

У вас есть два onClickListener сек внутрь из onClickListener для начинающих. Избавьтесь от внутреннего набора и попробуйте добавить флаг, чтобы после запуска вашего Intent он снова не запускался в следующий раз. Вам нужно будет сбросить флаги в какой-то момент, чтобы Intents не только открывались один раз.

boolean flag1 = true; 
boolean flag2 = true; 

button.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 

     if ("abc".equals(textedit.getText().toString()) && flag1) { 
      flag1 = false; 
      Intent intent = new Intent (MainActivity.this, Schoen1.class); 
      startActivity(intent); 

     } else if ("bbb".equals(textedit.getText().toString()) && flag2) { 
      flag2 = false; 
      Intent i = new Intent (MainActivity.this, Schoen2.class); 
      startActivity(i); 

     } else { 
      button.setText("wrong pass"); 
     } 

    } 
}); 

Код не проверен.

+0

, я пробовал ваш метод, но я продолжаю получать «Конечный локальный переменный флаг2 не может быть назначен, поскольку он определен в закрывающем типе» и тот же, что и во флагах 1 при флаг1 = ложная часть. Как это исправить? – user2320105

+0

Вы не можете переназначить переменную 'final'. Вот почему они «final» – codeMagic

+0

@codeMagic. Вы не можете переназначить конечную переменную, но можете изменить значение. – jschabs

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