2013-02-20 33 views
11

के लिए मोनो में रननेबल का उपयोग कैसे करें मैं मोनोड्रॉइड को लर्न करने की कोशिश करता हूं! मैं जावा कोड को फिर से लिखने की कोशिश करता हूं और कुछ समस्या है: मुझे समझ में नहीं आता कि कैसे रननेबल का उपयोग करना है। कि जावा में कोड की snipet है, कि मैं सी # में अनुवाद coudn't:एंड्रॉइड

public class RunActivity extends Activity implements OnClickListener 
{ 
    ... 

    private Handler mHandler; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.run); 
     ... 
     mHandler = new Handler(); 
     mHandler.postDelayed(mUpdateGeneration, 1000); 
    } 

    private Runnable mUpdateGeneration = new Runnable() 
    { 
     public void run() 
     { 
      mAdapter.next(); 
      mLifeGrid.setAdapter(mAdapter); 

      mHandler.postDelayed(mUpdateGeneration, 1000); 
     } 
    }; 
    ... 

तुम मुझे बता सकते हैं कि कैसे मैं इस कोड को लिखने और Runnable का उपयोग करना चाहिए? अपडेट ग्रिडव्यू एडाप्टर के लिए यह रननेबल उपयोग और एडाप्टर से लोड डेटा को पृष्ठभूमि में ग्रिडव्यू में लोड करें। अगर मैंने मुख्य थ्रेड में एडाप्टर अपडेट करने का प्रयास किया है? इस तरह (सी # कोड):

mAdapter.next() 
mLifeGrid.Adapter = mAdapter; 
Thread.Sleep(1000); 

गतिविधि अटक गई है। यदि मैं रननेबल का उपयोग नहीं कर सकता, तो मैं नए थ्रेड में एडाप्टर और ग्रिडव्यू को अपडेट करने का तरीका कैसे कार्यान्वित कर सकता हूं? अगर मैं सी # सूत्रण, इस तरह का उपयोग करें:

... 
Thread th = new Thread(new ThreadStart(mUpdatGeneration)); 
th.Start(); 
} 
public void mUpdateGeneration() 
{ 
    mAdapter.next() 
    mLifeGrid.Adapter = mAdapter; 
    Thread.Sleep(1000); 
} 

यह किसी भी मदद के लिए सभी को एक त्रुटि "System.NullReferenceException"

धन्यवाद उत्पन्न करता है! पीएस मेरी अंग्रेजी के लिए खेद है :)

+1

में Runnable कार्यान्वयन यह सी # है अनुवाद करते हैं, तो सी # सूत्रण वर्गों का उपयोग है। –

+0

@ किर्कवॉल 'हैंडलर' थ्रेडिंग क्लास नहीं हो सकता है। ऐसा लगता है कि आप मुख्य घटना कतार में पोस्ट करने के लिए उपयोग कर सकते हैं। – millimoose

+0

@ मिलिमोस, ठीक है, लेकिन किसने 'हैंडलर' लागू किया? यदि यह एक मोनो प्रोजेक्ट है, तो किसी को जावा मुहावरे का उपयोग नहीं करना चाहिए। –

उत्तर

6

ऐसा लगता है वहाँ an overload of PostDelayed() that takes an Action parameter है, तो सरल तरीके से इस तरह कुछ करने के लिए किया जाएगा की तरह:

void UpdateGeneration() 
{ 
    mAdapter.next(); 
    mLifeGrid.setAdapter(mAdapter); 
    mHandler.PostDelayed(UpdateGeneration, 1000); 
} 

// ... 

mHandler.PostDelayed(UpdateGeneration, 1000); 

(अस्वीकरण: मैं वास्तव में कभी नहीं MonoDroid का उपयोग किया है, लेकिन यह चाहिए मान्य हो।)

+0

मिलीमोज़, यह मान्य नहीं है, लेकिन धन्यवाद! – Beyka

+0

@ बेका यह मान्य नहीं है क्योंकि इसमें बिल्कुल संकलित नहीं किया गया था, या उस जवाब में वास्तव में आपको आगे बढ़ने में मदद नहीं मिली है? (यदि कोई मामूली समस्या है तो मैं इसे उत्तर में ठीक करना चाहता हूं।) – millimoose

+0

यह वास्तव में कुछ कारणों से नहीं है: हैंडलर.पोस्टडेले में 2 पैरामीटर हैं (एक्शन एक्शन, लम्बी देरी मिलिस)। अगर मैं कुछ एक्शन प्रतिनिधि को mAdapter.next() और mLifeGrid.Adapter = mAdapter डालता हूं - मेरे पास System.NullReferenceException था। यदि आप चाहते हैं - मैं जिथब को स्रोत कोड अपलोड कर सकता हूं और आप समस्या को हल करने का प्रयास करते हैं। मुझे लगता है - यह समस्या monodroid डेवलपर्स के लिए वास्तविक है। – Beyka

2

का तरीका यहां बताया ग #

private Java.Lang.Runnable mUpdateGeneration = new Java.Lang.Runnable(() => 
{ 
    mAdapter.next(); 
    mLifeGrid.setAdapter(mAdapter); 
    mHandler.postDelayed(mUpdateGeneration, 1000); 
}); 

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

  • कोई संबंधित समस्या नहीं^_^