2013-03-31 4 views
3

У меня есть несколько кнопок в приложении для Android. Я хочу знать, в коде Java, какая кнопка была нажата. Насколько я могу судить, это достигается с помощью одного метода, как это:Как определить, какая кнопка была нажата в onClick()

public void onClick(View view) { 
    // Do something 
} 

И внутри этого метода, вы должны выяснить, какая кнопка была нажата. Это верно?

Если да, то как мне узнать, на что было нажато? У меня есть различные объекты Button, возвращаемые findViewById(). Я просто не знаю, как их использовать, чтобы определить, какая кнопка была нажата.

+1

Использование 'this' ?? – enapupe

ответ

12

Внесите View OnClickListner в свой класс активности. Переопределить метод щелчка.

Button b1= (Button) findViewById(R.id.button1); 
//find your button id defined in your xml. 


b1.setOnClickListener(this); 
// You have button OnClickListener implemented in your activity class. 
//this refers to your activity context. 

Я использовал тост-сообщение.

http://developer.android.com/guide/topics/ui/notifiers/toasts.html

Toast.makeText(MainActivity.this,"button1", 1000).show(); 
//display a toast using activity context ,text and duration 

Использование переключателя случае вы можете проверить, какая кнопка нажата.

В вашем методе onClick.

switch(v.getId()) //get the id of the view clicked. (in this case button) 
{ 
case R.id.button1 : // if its button1 
    //do something 
    break; 
} 

Вот полный код.

public class MainActivity extends Activity implements OnClickListener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button b1= (Button) findViewById(R.id.button1); 
    Button b2= (Button) findViewById(R.id.button2); 
    Button b3= (Button) findViewById(R.id.button3); 
    b1.setOnClickListener(this); 
    b2.setOnClickListener(this); 
    b3.setOnClickListener(this); 

} 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()) 
    { 
    case R.id.button1 : 
     Toast.makeText(MainActivity.this,"button1", 1000).show(); 
     break; 
    case R.id.button2 : 
     Toast.makeText(MainActivity.this,"button2", 1000).show(); 
     break; 
    case R.id.button3 : 
     Toast.makeText(MainActivity.this,"button3", 1000).show(); 
     break; 


    } 

} 
} 
4

Если да, то как узнать, что было нажато?

Старый друг переключатель поможет вам достичь вашей цели:

public void onClick(View view) { 
    switch (view.getId()) { 
     case R.id.btn1: 
     // do your stuff for btn1 
     break; 
     case R.id.btn2: 
     // do your stuff for btn2 
     break; 
     ... 
    } 
} 

Объяснение: Каждый виджет имеет ID, так что вы можете просто обрабатывать, какая кнопка нажата через его ID в переключателе написано выше ,

view.getId()ID виджетов.

+0

Да, что работает. Благодаря! –

+0

@JB_User приветствуется – Sajmon

4

Есть разные способы справиться с этим. С чем вы в настоящее время, вы можете использовать

public void onClick(View view) { 
    // Do something 
    view.getId(); 
} 

, который возвращает значение в android:id в вашем xml. Вы можете использовать оператор switch, чтобы сравнить значения, чтобы решить, что делать, и включить id. Вы также можете оценить onClick() в вашем xml с каждым button.

<Button 
    ... 
    android:onClick="functionName"/> 

затем в коде Java вы можете иметь

public void functionName(View view) { 
     // Do something 
    } 

И view щелкнул здесь будет button вы назначили этот onClick в вашем xml

3

Вы можете также используйте анонимные внутренние классы для каждой кнопки:

Button b1= (Button) findViewById(R.id.button1); 
Button b2= (Button) findViewById(R.id.button2); 

b1.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // button 1 was clicked! 
    } 
}); 
b2.setOnClickListener(new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // button 2 was clicked! 
    } 
}); 
1

Вы можете использовать библиотеку (http://jakewharton.github.io/butterknife/):

//Fragment 
@InjectView(R.id.dialog_userinput) 
public EditText userinput; 

@InjectView(R.id.dialog_passinput) 
public EditText passinput; 

@OnClick(R.id.dialog_login) 
public void login(View view) { 
    //do stuff 
    this.dismiss(); 
} 

@OnClick(R.id.dialog_cancel) 
public void cancel(View view) { 
    //do stuff 
    this.dismiss(); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.dialog_layout, container); 
    ButterKnife.inject(this, view); 
    return view; 
} 
+0

'@ InjectView' был переименован в' @ Bind' в v7 и '@ BindView' в v8 – EpicPandaForce

0
implements 

    public class ProgramsFiles extends AppCompatActivity implements View.OnClickListener { 

     public void onClick(View view) { 
      switch (view.getId()) { 
       case R.id.btnA: 
       //ExampleA 
        break; 
       case R.id.btnB: 
       //ExampleB 
       break;  
    } 
} 
} 
Смежные вопросы