2011-10-24 13 views
20

मैंने एंड्रॉइड में थोड़ा सा प्रोग्राम शुरू किया, मेरे पास एक ही गतिविधि में 3 बटन हैं।एकाधिक बटन के लिए एंड्रॉइड वन ऑनक्लिक विधि?

मैं कुछ उदाहरण कोड है कि सभी बटन (भले ही वे पूरी तरह से अलग क्रिया को निष्पादित) के लिए एक ही OnClick घटना आवंटित और विधि Switch(id) मामले मामले मामले में ...

बेहतर क्या दृष्टिकोण है देखा था? एक onClick विधि और स्विचिंग या कई विधियों, प्रत्येक बटन के लिए एक?

धन्यवाद।

उत्तर

19

आप कम करने के लिए कोडिंग लाइनों तो View's OnClick() with switch statement का उपयोग करें और आप सभी क्लिक (आसानी से समझने और कोड बनाए रखने के लिए) अलग से संभाल करने के लिए चाहते हैं तो का उपयोग अलग सभी button's onClick().

अद्यतन करना चाहते हैं:

हैं आपने अपने गतिविधि लेआउट xml फ़ाइल में बटनों को घोषित किया है, लिखने की विशेषता android:onClick="" लिखने के बजाय सभी बटनों के लिए समान विधि नाम के साथ और अपनी गतिविधि में उस विधि को लागू करें। अब आपके पास सभी बटनों के लिए एक विधि है और उस विधि में आईडी के साथ बटन को अलग करें।

उदाहरण:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical" > 
    <Button android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:onClick="buttonOnClick" 
      android:layout_height="wrap_content" 
      android:text="Hello, I am a Button 1" /> 
    <Button android:id="@+id/button2" 
      android:layout_width="wrap_content" 
      android:onClick="buttonOnClick" 
      android:layout_height="wrap_content" 
      android:text="Hello, I am a Button 2" /> 
    <Button android:id="@+id/button3" 
      android:layout_width="wrap_content" 
      android:onClick="buttonOnClick" 
      android:layout_height="wrap_content" 
      android:text="Hello, I am a Button 3" /> 
</LinearLayout> 
अपनी गतिविधि में अब buttonOnClick तरह लागू

,

public void buttonOnClick(View view) 
{ 
switch(view.getId()) 
{ 
    case R.id.button1: 
    // Code for button 1 click 
    break; 

    case R.id.button2: 
    // Code for button 2 click 
    break; 

    case R.id.button3: 
    // Code for button 3 click 
    break; 
} 
} 

या फिर आप अपने गतिविधि में, जैसे बजाय buttonOnClick गतिशील रूप से जोड़ा बटन के लिए एक ही स्विच मामले आवेदन कर सकते हैं आपको लागू करना है व्यू ऑन ऑनक्लिक लिस्टररonClick लागू किया गया है।

6
this.btnAddFriedtoFacebook = (Button) this.findViewById(R.id.btnAddFriedtoFacebook); 
this.btnAddFriedtoFacebook.setOnClickListener(this.backButtonClickListener); 

public OnClickListener backButtonClickListener = new OnClickListener() 
{ 
public void onClick(final View view) 
{ 
    if (view == MatchInfoActivity.this.btnBack) 
    { 
     MatchInfoActivity.this.finish(); 
    } 
    if(view == MatchInfoActivity.this.btnAddFried){ 
     Intent i = new Intent(Intent.ACTION_VIEW); 
     MatchInfoActivity.this.startActivity(i); 
    } 
    if(view == MatchInfoActivity.this.btnAddBuddy){ 
     Intent i = new Intent(Intent.ACTION_VIEW); 
     MatchInfoActivity.this.startActivity(i); 
    } 
} 
}; 

यहां अच्छा तरीका है।

+0

वह क्लिक नहीं कर रहा है कि क्लिक को कैसे संभालना है, केवल दो तकनीकों में से कौन सा वह पहले से ही जागरूक है। – goto10

2

मुझे लगता है कि onClick एक्सएमएल (लेआउट) में पंजीकरण करना बेहतर दृष्टिकोण है।

संपादित करें:

मिले संबंधित धागे:

  1. Best practice for defining button events in android
  2. best practices for handling UI events
+0

मुझे लगता है कि इसे एक्सएमएल में रखना थोड़ा अजीब है क्योंकि यह एकमात्र यूआई व्यवहार है जो इस तरह से काम करता है। हो सकता है कि यह आईओएस की तरह अधिक हो, जहां आप यूआई डिजाइनर से अपने सभी यूआई हैंडलर सेट अप करते हैं तो इससे अधिक समझदारी होगी। – goto10

34

उपयोग इस तरह से:

@Override 
public void onCreate(Bundle savedInstanceState) { 
     button1.setOnClickListener(onClickListener); 
     button2.setOnClickListener(onClickListener); 
     button3.setOnClickListener(onClickListener); 
} 

private OnClickListener onClickListener = new OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     switch(v.getId()){ 
      case R.id.button1: 
        //DO something 
      break; 
      case R.id.button2: 
        //DO something 
      break; 
      case R.id.button3: 
        //DO something 
      break; 
     } 

    } 
}; 
+0

आप अंतिम का उपयोग क्यों कर रहे हैं? –

+0

यह अमूर्त विधि है। मुझे लगता है कि हमें इसकी परवाह करने की आवश्यकता नहीं है। –

+0

अगर हम अलग-अलग गतिविधियों में बटन रखते हैं तो हम यह कैसे कर सकते हैं? – Bran

0

XML लेआउट में पंजीकृत ऑनक्लिक ईवेंट और फिर कोड में इसे संभाल लें। यह कैसे मैं यह कर देगी:

<Button 
android:id="@+id/btplus" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Click me" 
android:onClick="onBtnClicked"> 

में विधि।कक्षा

public void onBtnClicked(View v) { 
     switch (v.getId()) { 
     case R.id.btplus: 
      Toast.makeText(getApplicationContext(), "Plus is clicked" + "+", Toast.LENGTH_SHORT).show(); 
      break; 
     case R.id.btminu: 
      Toast.makeText(getApplicationContext(),"Minus is clicked" + "-", Toast.LENGTH_SHORT).show(); 
      break; 
     default: 
      break; 
     } 
    } 
0

@Nguyen उत्तर में थोड़ा सा अतिरिक्त।

findViewById(R.id.buttonOne).setOnClickListener(buttonClickListener); 
.... .... .... .... 
findViewById(R.id.buttonN).setOnClickListener(buttonClickListener); 

private View.OnClickListener buttonClickListener = new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.buttonOne: 
       // do something 
       break; 
      .... .... .... .... 
      case R.id.buttonN: 
       // do something 
       break; 
     } 
    } 
}; 

यह अगर आप बटन चर इनिशिएलाइज़, लेकिन बटन क्लिक करें घटना ट्रैक करना चाहते हैं नहीं करना चाहती, उपयोगी हो सकता है। धन्यवाद!

संबंधित मुद्दे