मुझे OnGlobalLayoutListener
ऑब्जेक्ट का उपयोग करना है और फिर श्रोता को हटाने के लिए, मुझे निम्नलिखित कोड के साथ हल किए गए बहिष्कृत तरीकों के साथ समस्या थी।OnGlobalLayoutListener: बहिष्करण और संगतता
protected void onCreate(Bundle savedInstanceState) {
final LinearLayout llTotal = (LinearLayout) findViewById(R.id.mmc_ll);
ViewTreeObserver vto = llTotal.getViewTreeObserver();
if(vto.isAlive()){
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//
// mycode
//
if (Build.VERSION.SDK_INT<16) {
removeLayoutListenerPre16(llTotal.getViewTreeObserver(),this);
} else {
removeLayoutListenerPost16(llTotal.getViewTreeObserver(), this);
}
}
});
}
super.onCreate(savedInstanceState);
}
@SuppressWarnings("deprecation")
private void removeLayoutListenerPre16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeGlobalOnLayoutListener(listener);
}
@TargetApi(16)
private void removeLayoutListenerPost16(ViewTreeObserver observer, OnGlobalLayoutListener listener){
observer.removeOnGlobalLayoutListener(listener);
}
क्या यह सही है? संगतता को संभालने का एक बेहतर तरीका है?
एपीआई 10 के साथ एमुलेटर में कोड चल रहा है LogCat
04-24 09:30:12.565: I/dalvikvm(471): Could not find method android.view.ViewTreeObserver.removeOnGlobalLayoutListener, referenced from method com.my.project.ActivityHome.removeLayoutListenerPost16
04-24 09:30:12.565: W/dalvikvm(471): VFY: unable to resolve virtual method 2950: Landroid/view/ViewTreeObserver;.removeOnGlobalLayoutListener (Landroid/view/ViewTreeObserver$OnGlobalLayoutListener;)V
में निम्न चेतावनी मैं उन्हें अनदेखा कर सकते हैं की मैं किसी तरह से ठीक करने के लिए है?
शुरुआत में मैं अपने कोड का इस्तेमाल किया, लेकिन यह एक त्रुटि देना (कॉल एपीआई स्तर 16 (की आवश्यकता वर्तमान मिनट 8) है: android.view.ViewTreeObserver # removeOnGlobalLayoutListener) (और एक चेतावनी (विधि removeGlobalOnLayoutListener ViewTreeObserver.OnGlobalLayoutListener) ViewTreeObserver प्रकार से बहिष्कृत है)। मेरा कोड उन मुद्दों को हल करता है लेकिन लॉगकैट चेतावनी – crbin1
चेतावनी ठीक है। ऐसा इसलिए है क्योंकि आप डिवाइस के लिए बहिष्कृत फ़ंक्शन के साथ कुछ sdk संस्करण के जार का उपयोग कर रहे हैं
@ crbin1 आप फ़ंक्शन घोषणा से पहले @TargetApi (Build.VERSION_CODES.JELLY_BEAN) जोड़ सकते हैं, अगर आप इस चेतावनी/त्रुटि को देखने से बचना चाहते हैं। –