2013-04-18 4 views
5

का उपयोग करके सूचीदृश्य भरने से पहले प्रगति संकेतक दिखाएं, मेरी सूचीदृश्य डेटाबेस के डेटा से भरा नहीं है, जबकि प्रगति संकेतक दिखाने का बेहतर तरीका क्या है?CursorLoader

मुझे assynctask का उपयोग करके यह कैसे करना है इसके कुछ उदाहरण मिले, लेकिन मेरे मामले में, मैं Loader/CursorLoader का उपयोग कर रहा हूं।

public class TestActivity extends SherlockFragmentActivity implements 
    LoaderCallbacks<Cursor> { 

SimpleCursorAdapter mAdapter; 
ListView mListView; 

private static final String[] UI_BINDING_FROM = new String[] { 
     TestDBAdapter.KEY_NAME, TestDBAdapter.KEY_ICON }; 

private static final int[] UI_BINDING_TO = new int[] { R.id.text, R.id.icon }; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_Test); 

    mListView = (ListView) findViewById(R.id.listview); 

    mAdapter = new TestAdapter(getApplicationContext(), 
      R.layout.list_item_Test, null, UI_BINDING_FROM, 
      UI_BINDING_TO, 0); 

    mListView.setAdapter(mAdapter); 

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

} 

@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle args) { 


    Uri uri = ContentProviderTest.CONTENT_URI; 

    CursorLoader cursorLoader = new CursorLoader(
      this, 
      uri, 
      null, 
      null, 
      null, 
      null); 

    return cursorLoader; 

} 

@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
    mAdapter.swapCursor(data); 
} 

@Override 
public void onLoaderReset(Loader<Cursor> loader) { 
    mAdapter.swapCursor(null); 
} 
} 

सम्भावित समाधान, ListFragment का विस्तार एक नया वर्ग बना सकते हैं और setListShown() विधि का उपयोग किया जाएगा, लेकिन अगर यह इस समस्या को हल करने के लिए सबसे अच्छा तरीका है मैं नहीं जानता। उसकी दृश्यता के साथ स्थापित करने के लिए "चला गया"

धन्यवाद

उत्तर

13

अपने लेआउट फाइल करने के लिए एक छोटा सा ProgressBar जोड़ें। अपना कर्सर लोडर बनाने से ठीक पहले, इसकी दृश्यता "दृश्यमान" पर सेट करें। यह दिखाई देगा। ऑनलोड लोड करें, प्रोग्रेसबार दृश्यता को "चला गया" पर सेट करें। यह गायब हो जाएगा, और आपकी ListView लोड हो जाएगी।

मैं छोटी शैली प्रगति पट्टी का उपयोग करूंगा। इसके बारे में और जानने के लिए, android.widget.progressBar के लिए संदर्भ दस्तावेज़ देखें।

बीटीडब्ल्यू, दृश्यता View.setVisibility के साथ नियंत्रित है।

+0

आपके उत्तर ने मुझे यह जानकारी प्राप्त करने में मदद की [http://stackoverflow.com/questions/12559461/how-to-show-progress-barcircle-in-an-activity-having-a-listview-before-loading/12559601 # 12559601)। मेरा मानना ​​है कि यह सबसे आसान तरीका है। धन्यवाद – elirigobeli

0

सही जवाब के अलावा: यह onLoadFinished() में एक अच्छा विचार इस चेक के लिए है: डेटा के साथ डाटाबेस को भरने के लिए अपने curstom Service पर भरोसा करने के मामले में

if (cursor.getCount() > 0) { 
    getView().findViewById(R.id.loadingPanel).setVisibility(View.GONE); 
    getView().findViewById(android.R.id.list).setVisibility(View.VISIBLE); 
} 

अन्यथा, कर्सर हो सकता है खाली रहें और नतीजा कोई प्रगति पट्टी नहीं होगी और न ही दिखाए गए सामानों की सूची होगी।

+0

लोडर असीम रूप से दिखा रहा है एक अच्छा विचार नहीं होगा, इसके बजाय getCount() == 0 जब उचित संदेश "रिकॉर्ड नहीं मिला" दिखाएं –

0

मेरे पास एक सूची में एक costumCursorAdapter है दृश्य देखें।

मेरे पास डेटा बेस में डेटा बदलते समय costumCursorAdapter को स्वैप करने के लिए कर्सर लोडर भी है। उपयोगकर्ता द्वारा शुरू की गई खोज द्वारा डीबी डेटा दर्ज किया जाता है। इन सलाह की

कोई भी काम किया, गूगल कोई मदद नहीं था - कुछ भी नहीं sulotion-

  1. 'अभी के लिए केवल' एक बार अंततः i.e. progress_bar.setVisibility(View.Gone);

    visible- करने के लिए सेट प्रगति बार, एक सरल और के रूप में stoped मैंने काउंटर int count = 0 काउंटर के रूप में कार्य करने के लिए एक वैश्विक चर बनाया है। यह प्रत्येक खोज के साथ 0 पर रीसेट किया गया है (onClick बटन की विधि में)।

  2. कस्टम कोड एडाप्टर के bindView में, इस कोड ब्लॉक के नीचे- मैंने count ++ के साथ गिनती शुरू की।
  3. कोड ब्लॉक मैं जाँच करता है, तो गिनती 4. पहुंचा था तो यह है के शीर्ष पर, मैं प्रगति बार छिपाने:

     if (count==4){ 
         pb.setVisibility(View.GONE); 
        } 
    
  4. इस तरह, जब customAdapter 4 दृश्य बांधता है, मुझे पता है प्रगति पट्टी को रोकने के लिए यह resonable है।

  5. मेरे पास सूची में 4 से कम आइटम नहीं हैं।

आशा इस कोई मदद करता है।

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