2012-03-29 11 views
25

मैं वर्तमान में लोडर का उपयोग करने के तरीके सीखने की कोशिश कर रहा हूं और मेरी गतिविधि में लोडर शुरू करने में परेशानी हो रही है।किसी गतिविधि में लोडर प्रारंभ करना

import android.support.v4.app.LoaderManager; 
import android.support.v4.content.Loader; 

public class ASwitchActivity extends Activity implements 
      LoaderManager.LoaderCallbacks<SampleLoader.SampleLoaderResult> { 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     getLoaderManager().initLoader(0, null, this); 
    } 

    public Loader<SampleLoader.SampleLoaderResult> onCreateLoader(int id, Bundle args) { 
     return new SampleLoader(getBaseContext(), account, "dog"); 
} 

    public void onLoadFinished(Loader<SampleLoader.SampleLoaderResult> loader, SampleLoader.SampleLoaderResult out) 
    { 
     TextView t=(TextView)findViewById(R.id.testTV); 
     t.setText("yay"); 
    } 

    public void onLoaderReset(Loader<SampleLoader.SampleLoaderResult> loader){ 

    } 
} 

हालांकि ग्रहण बताते हुए एक त्रुटि देता है:

विधि initLoader (पूर्णांक, बंडल, LoaderManager.LoaderCallbacks) प्रकार LoaderManager में तर्क (पूर्णांक, अशक्त, ActivitySwitchActivity लिए लागू नहीं है)

क्या कोई भी गलत कहां से मदद कर सकता है?

उत्तर

80

जैसा कि मैं देख सकता हूं कि आप supportV4 लाइब्रेरी का उपयोग करते हैं। तो लोडर लागू करने के लिए आप कुछ बातें करना चाहिए:

  1. उपयोग getSupportLoaderManager getLoaderManager
  2. के बजाय विधि FragmentActivity वर्ग से आपकी गतिविधि का विस्तार
यहाँ

नमूना कोड है:

import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.LoaderManager; 
import android.support.v4.content.Loader; 
import android.widget.Toast; 

public class MyActivity extends FragmentActivity implements LoaderManager.LoaderCallbacks<Object> { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    getSupportLoaderManager().initLoader(0, null, this); 
} 

@Override 
public Loader<Object> onCreateLoader(int i, Bundle bundle){ 
    return null; // TODO 
} 

@Override 
public void onLoadFinished(Loader loader, Object o) { 
    Toast.makeText(this, "onLoadFinished", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onLoaderReset(Loader loader) { 
    Toast.makeText(this, "onLoaderReset", Toast.LENGTH_SHORT).show(); 
} 
} 
+1

क्या होगा यदि आपने मूल रूप से 'ListActivity'' बढ़ाया है? 'FragmentListActivity' जैसी कोई चीज़ नहीं है जिसे मैं प्रतिस्थापन के रूप में छोड़ सकता हूं। –

+2

@MattHuggins ListActivity मुख्य रूप से बहुत कम चीजों के लिए एक सुविधा है - आप लापता कार्यक्षमता को स्वयं कार्यान्वित कर सकते हैं (सूची दृश्य को फ़ील्ड के रूप में रखें) – ataulm

1

getLoaderManager().initLoader(0, null, this); के लिए तीसरे पैरामीटर एक उदाहरण है कि इंटरफ़ेस LoaderManager.LoaderCallbacks लागू तो तुम इंटरफ़ेस पहले लागू करना चाहिए होना चाहिए।

+0

खेद है कि मैं मेरा पूरा कोड पहले पोस्ट नहीं किया था, केवल एक अंश। LoaderManager.LoaderCallbacks इंटरफ़ेस द्वारा आपका क्या मतलब है? क्या वे ऑनक्रेट लोडर, ऑनलोड लोड, और ऑनलोडर रीसेट पर होंगे? क्योंकि मेरे पास उनके कार्यक्रम में है? –

1

लोडर को प्रारंभ करने के लिए AppCompatActivity getSupportLoaderManager().initLoader(0,null,this); का उपयोग करें।

8

fragments उपयोग के साथ लोडर का उपयोग करते समय:

getLoaderManager().initLoader(0,null,this); 

और जब Activity उपयोग के साथ लोडर का उपयोग कर:

getSupportLoaderManager().initLoader(0,null,this); 
+0

यह मेरे लिए दूसरी तरफ काम करता है। – waseefakhtar

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