के बिना लोडर कॉलबैक का उपयोग करना मैं AsyncTaskLoader पर कुछ हाथ पढ़ रहा हूं ताकि मैं संपर्क सूची लोड करने के लिए तकनीक का उपयोग कर सकूं। कोड काम करने का एकमात्र समय यह है कि जब मैं को MyLoader extends Fragment implements LoaderCallbacks<ArrayList<Contact>>
में विस्तारित करता हूं तो उस वर्ग से कॉलबैक लागू करता है। क्या कोई और तरीका है? मेरे बैकएंड को भेजने के लिए मुझे वास्तव में संपर्क सूची (नाम, फोन, थंबनेल) की ज़रूरत है। उदाहरण के लिए, मैं Context
का उपयोग करने का प्रयास करता हूं, क्योंकि मैं इसे (Context)this
करके किसी भी गतिविधि से प्राप्त कर सकता हूं, कोड संकलित करने में भी विफल रहता है। संदर्भ से मेरा मतलब हैFragment
context.getLoaderManager().initLoader(1, null, this);
//I already changed to Fragment so don't really remember the exact ".context" line.
//But someone who has done this will understand the snippet.
बीटीडब्ल्यू: मैं कई संदर्भों का उपयोग कर रहा हूं। एक http://developer.android.com/reference/android/content/AsyncTaskLoader.html है।
प्रश्न (दोबारा): क्या मैं बिना किसी फ्रेगमेंट या फ्रैगमेंट एक्टिविटी के AsyncTaskLoader का उपयोग कर सकता हूं?
कोड है जो विभाजन के साथ काम करता है:
package com.example.contactpreload.utils;
import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager.LoaderCallbacks;
import android.support.v4.content.Loader;
public class LoadingContacts extends Fragment implements LoaderCallbacks<ArrayList<Contact>> {
ArrayList<Contact> loadedContacts;
static Fragment fragmentActivity;
public static LoadingContacts newInstance(int arg) {
LoadingContacts f = new LoadingContacts();
Bundle bundle = new Bundle();
bundle.putInt("index", arg);
f.setArguments(bundle);
fragmentActivity = new Fragment();
return f;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("onCreate()");
int mIndex = getArguments().getInt("index");
System.out.println(mIndex);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
System.out.println("onActivityCreated()");
getLoaderManager().initLoader(1, null, this);
}
@Override
public Loader<ArrayList<Contact>> onCreateLoader(int arg0, Bundle arg1) {
System.out.println("onCreateLoader()");
return new ContactsLoader(getActivity());
}
@Override
public void onLoadFinished(Loader<ArrayList<Contact>> loader, ArrayList<Contact> data) {
loadedContacts = data;
System.out.println("AND THE CONTACTS ARE: ");
for (Contact c : loadedContacts) {
System.out.println("NAME: " + c.getName());
System.out.println("getPhoneNumberHome: " + c.getPhoneNumber());
}
}
@Override
public void onLoaderReset(Loader<ArrayList<Contact>> arg0) {
System.out.println("onLoaderReset()");
// TODO Auto-generated method stub
}
}
package com.example.contactpreload;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
import com.example.contactpreload.utils.LoadingContacts;
public class MainActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LoadingContacts fragment = LoadingContacts.newInstance(1);
fragment.setRetainInstance(true);
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, fragment).commit();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
MANIFEST:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />
@ बॉसिलोबस्टर, मैं इसका जवाब देने की कोशिश कर रहा हूं, लेकिन मैं इसे क्रैक नहीं कर रहा हूं। कोई इनपुट? आपके सहयोगियों के बारे में कैसे? मुझे स्तर 8 एपीआई भाग क्या मिलता है। यह वास्तव में टुकड़े के साथ काम करता है लेकिन स्पष्ट रूप से कुछ और नहीं (wangyif2 की प्रतिक्रिया में नीचे चर्चा को रेफरी करें)। –