मैं इस स्थिति हाल ही में था जब स्पिनरों का उपयोग करने और इंटरनेट नहीं था ' टी एक उपयुक्त समाधान के साथ आया था।
मेरा आवेदन परिदृश्य:
एक्स & की स्थापना सीपीयू आवृत्ति को देखने के लिए स्पिनरों (गतिशील, प्रत्येक सीपीयू के लिए 2, न्यूनतम & अधिकतम)। आवेदन शुरू होने पर वे भरे जाते हैं और उन्हें सीपीयू सेट का वर्तमान अधिकतम/न्यूनतम freq भी मिलता है। एक धागा पृष्ठभूमि में चलता है और हर सेकेंड में परिवर्तन के लिए जांच करता है और स्पिनरों को तदनुसार अपडेट करता है। यदि उपयोगकर्ता द्वारा स्पिनर के अंदर एक नई आवृत्ति सेट की जाती है तो नई आवृत्ति सेट होती है।
मुद्दा यह था कि धागे ने वर्तमान आवृत्ति को अद्यतन करने के लिए सेट चयन का उपयोग किया, जिसने बदले में मेरे श्रोता को बुलाया और मुझे यह जानने का कोई तरीका नहीं था कि यह उपयोगकर्ता या धागा जिसने मूल्य बदल दिया है। अगर यह धागा था तो मैं नहीं चाहता था कि श्रोता को बुलाया जाए क्योंकि आवृत्ति को बदलने की आवश्यकता नहीं होती थी।
मैं एक समाधान है कि मेरी जरूरतों को पूरी तरह से सूट और अपने कॉल :) पर श्रोता के आसपास काम करता है (और मैं इस समाधान आप अधिकतम नियंत्रण देती है लगता है)
मैं स्पिनर बढ़ाया के साथ आया था:
import android.content.Context;
import android.widget.Spinner;
public class MySpinner extends Spinner {
private boolean call_listener = true;
public MySpinner(Context context) {
super(context);
}
public boolean getCallListener() {
return call_listener;
}
public void setCallListener(boolean b) {
call_listener = b;
}
@Override
public void setSelection(int position, boolean lswitch) {
super.setSelection(position);
call_listener = lswitch;
}
}
और अपने OnItemSelectedListener बनाया:
+०१२३५१६४१०६:
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
public class SpinnerOnItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
MySpinner spin = (MySpinner) parent.findViewById(parent.getId());
if (!spin.getCallListener()) {
Log.w("yourapptaghere", "Machine call!");
spin.setCallListener(true);
} else {
Log.w("yourapptaghere", "UserCall!");
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
अब आप एक MySpinner आप इस का उपयोग कर सकते चयन स्थापित करने के लिए बनाते हैं
setSelection(position, callListener);
जहां कॉललिस्टर या तो सत्य या गलत है। ट्रू श्रोता को कॉल करेगा और डिफ़ॉल्ट है, यही कारण है कि उपयोगकर्ता इंटरैक्शन की पहचान हो रही है, झूठी श्रोता को भी कॉल करेगी लेकिन इस विशेष मामले के लिए इच्छित कोड का उपयोग करती है, उदाहरण के लिए मेरे मामले में मुफ्त: कुछ भी नहीं।
मुझे आशा है कि किसी और को इस उपयोगी पाता है और एक लंबी यात्रा बख्शा है देखने के लिए अगर कुछ इस तरह पहले से मौजूद है :)
यह मैं के लिए काम किया साथ सेटिंग चयनित runnable http://stackoverflow.com/a/13528576/1104279 – Gil