android - एंड्रॉइड बटन को कैसे अक्षम करें?




layout button (6)

मैंने एक लेआउट बनाया है जिसमें दो बटन, अगला और पिछला शामिल है। बटन के बीच में मैं कुछ गतिशील विचार उत्पन्न कर रहा हूं। तो जब मैं पहली बार एप्लिकेशन लॉन्च करता हूं तो मैं "पिछला" बटन अक्षम करना चाहता हूं क्योंकि कोई पिछला विचार नहीं होगा। जब मैं प्रदर्शित करने के लिए और अधिक विचार नहीं करता हूं तो मैं "अगला" बटन भी अक्षम करना चाहता हूं। क्या बटन को अक्षम करने के लिए वैसे भी है?


अनुच्छेद के वैरिबल इंस्टीट्यूट का उपयोग करने के लिए लिस्टेनर में गलत तरीके !!!

btnSend.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        btnSend.setClickable(false);

    }
});

सही रास्ता:

btnSend.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        /** check given view  by assertion or cast as u wish */
        if(v instance of Button) {

            /** cast */
            Button button = (Button) v;

            /** we can perform some check up */
            if(button.getId() == EXPECTED_ID) {

                /** disable view */
                button.setEnabled(false)            
                button.setClickable(false); 
            }

        } else {

             /** you can for example find desired view by root view  */
             Button bt = (Button) v.getRootView().findViewById(R.id.btId);

             /*check for button */
             if(bt!=null) {

                 /** disable button view */
                 ...
             } else {
                 /** according to @jeroen-bollen remark
                   * we made assumption that we expected a view
                   * of type button here in other any case  
                   */
                  throw new IllegalArgumentException("Wrong argument: " +
                         "View passed to method is not a Button type!");
             }
          }
       }
    });

संपादित करें: @ जेरोएन-बोलेन के जवाब में

 View.OnClickListener 

एक दृश्य क्लिक होने पर कॉलबैक के लिए इंटरफ़ेस परिभाषा है।

विधि परिभाषा के साथ

void onClick(View v);

जब व्यू पर क्लिक किया जाता है तो व्यू क्लास ऑब्जेक्ट ऑनक्लिक () को पैरामीटर के रूप में भेजने के लिए कॉलबैक बनाता है, इसलिए शून्य दृश्य पैरामीटर नहीं होना चाहिए यदि यह एक एस्सारशन त्रुटि है तो उदाहरण के लिए ऐसा हो सकता है जब ऑब्जेक्ट क्लास को इस दौरान नष्ट कर दिया गया था (के लिए जीसी द्वारा एकत्रित उदाहरण) या हैक के कारण विधि छेड़छाड़ की गई थी

उदाहरण के बारे में थोड़ा और शून्य

जेएलएस / 15.20.2। तुलना ऑपरेटर उदाहरण टाइप करें

रन टाइम पर, उदाहरण के ऑपरेटर का परिणाम सत्य है यदि RelationalExpression का मान शून्य नहीं है और संदर्भ को क्लासकास्ट अपवाद के बिना संदर्भ प्रकार में डाला जा सकता है।

अन्यथा परिणाम झूठा है

लेखक से तीन शब्द

अगर यू ASK क्यों?

सबसे पहले NullPointerException से बचने के लिए

थोड़ा और कोड आपके कोड में बाद में बग ट्रैकिंग पर अपना समय बचाएगा और abnomalies की घटना को कम कर देगा।

निम्नलिखित उदाहरण पर विचार करें:

View.OnClickListener listener = new OnClickListener() {

    @Override
    public void onClick(View v) {
        btnSend.setClickable(false);

    }
});

btnSend.setOnClickListener(listener)
btnCancel.setOnClickListener(listener)  

आप इसे सक्षम नहीं कर सकते हैं या इसे अपने एक्सएमएल में अक्षम नहीं कर सकते हैं (क्योंकि आपका लेआउट रनटाइम पर सेट है), लेकिन अगर आप android:clickable साथ गतिविधि के लॉन्च पर क्लिक करने योग्य हैं तो क्लिक कर सकते हैं android:clickable


कोटलिन में, यदि आप आईडी के साथ बटन व्यू को संदर्भित करते हैं, तो बटन को सक्षम / अक्षम करें

layout.xml

<Button
   android:id="@+id/btn_start"
   android:layout_width="100dp"
   android:layout_height="50dp"
   android:text="@string/start"
   android:layout_alignParentBottom="true"/>

activity.kt

  btn_start.isEnabled = true   //to enable button
  btn_start.isEnabled = false  //to disable button

क्या आपने यह कोशिश की?

myButton.setEnabled(false); 

अद्यतन: ग्वेन के लिए धन्यवाद। लगभग android:clickable भूल गया android:clickable यह निर्धारित करने के लिए कि कोई बटन क्लिक करने योग्य है या नहीं, क्लिक करने योग्य आपके एक्सएमएल लेआउट में सेट किया जा सकता है।


पहले xml में बटन को android:clickable="false" रूप में बनाएं android:clickable="false"

<Button
        android:id="@+id/btn_send"
        android:clickable="false"/>

फिर आपके कोड में, oncreate() विधि के अंदर बटन प्रॉपर्टी को सेट करें

btn.setClickable(true);

फिर बटन के अंदर कोड को बदलें पर क्लिक करें

btn.setClickable(false);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    btnSend = (Button) findViewById(R.id.btn_send);
    btnSend.setClickable(true);
    btnSend.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            btnSend.setClickable(false);

        }
    });
}

मेरे मामले में,

myButton.setEnabled(false);
myButton.setEnabled(true);

ठीक काम कर रहा है और यह बटन को सक्षम और अक्षम कर रहा है जैसा इसे करना चाहिए। लेकिन एक बार बटन स्थिति अक्षम हो जाने के बाद, यह कभी भी सक्षम स्थिति पर वापस नहीं जाती है, हालांकि यह क्लिक करने योग्य है। मैंने आकर्षित करने योग्य राज्य को अमान्य और ताज़ा करने की कोशिश की, लेकिन कोई भाग्य नहीं।

myButton.invalidate();
myButton.refreshDrawableState();

यदि आप या किसी के पास एक समान समस्या है, तो मेरे लिए क्या काम करता है पृष्ठभूमि को फिर से खींचने योग्य सेट करना। किसी भी एपीआई स्तर पर काम करता है।

myButton.setEnabled(true);
myButton.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.myButtonDrawable));




button