2014-10-28 9 views
11

मेरे पास एक मुख्य गतिविधि है जिसमें इसमें 3 मेनू बटन के साथ एक्शन बार शामिल है।एंड्रॉइड अपनी मूल गतिविधि से एक खंड सूची रीफ्रेश करें

तब मेरे पास इस मुख्य गतिविधि के भीतर एक टुकड़ा है जिसमें एक सूची है।

मैं मुख्य गतिविधि से खंड में सूची को ताज़ा करने में सक्षम होना चाहता हूं, जब मेनू बटन में से एक क्लिक किया जाता है, या अधिमानतः सूची से सभी पंक्तियों को हटा दिया जाता है।

किसी भी मदद की सराहना की जाती है।

धन्यवाद।

public class Favourite extends SherlockFragmentActivity { 

    ActionBar actionBar; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.favourite); 

     actionBar = getSupportActionBar(); 

     actionBar.setDisplayShowTitleEnabled(false); 

     BitmapDrawable bg = (BitmapDrawable)getResources().getDrawable(R.drawable.actionbar_bg); 
     bg.setTileModeX(TileMode.REPEAT); 
     getSupportActionBar().setBackgroundDrawable(bg); 

     getSupportActionBar().setIcon(R.drawable.favourite_title); 

     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     ActionBar.Tab tabAll = actionBar.newTab(); 
     ActionBar.Tab tabfavs = actionBar.newTab(); 
     ActionBar.Tab tabhist = actionBar.newTab(); 
     tabAll.setText("all"); 
     tabfavs.setText("favs"); 
     tabhist.setText("hist"); 
     tabAll.setTabListener(new MyTabListener()); 
     tabfavs.setTabListener(new MyTabListener()); 
     tabhist.setTabListener(new MyTabListener()); 
     actionBar.addTab(tabAll); 
     actionBar.addTab(tabfavs); 
     actionBar.addTab(tabhist); 


     try{ 

     } 
     catch(Exception e) 
     { 
     } 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     MenuInflater inflater = getSupportMenuInflater(); 
     inflater.inflate(R.menu.actionbar_itemlist_favourite, menu); 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
       case R.id.history: 
        break; 
       case R.id.favourite: 
        Intent favAct = new Intent(this, Favourite.class); 
        startActivity(favAct); 
        break; 
       case R.id.delete: 
        ///I WANT TO BE ABLE TO REFRESH FRAGMENTLIST FROM HERE 
       } 
       return true; 
    } 

    } 

class MyTabListener implements ActionBar.TabListener { 

    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     if(tab.getPosition()==0) 
     { 
      FavouriteAllWords frag = new FavouriteAllWords(); 
      ft.replace(android.R.id.content, frag); 

     } 
     else if(tab.getPosition()==1) 
     { 
      FavouriteFavWords frag = new FavouriteFavWords(); 
      ft.replace(android.R.id.content, frag); 

     } 
     else if(tab.getPosition()==2) 
     { 
      FavouriteHistWords frag = new FavouriteHistWords(); 
      ft.replace(android.R.id.content, frag); 
     } 
    } 

    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

} 

//////////////////// मेरी सूची FRAGMENT कक्षा

public class FavouriteAllWords extends ListFragment { 

    ArrayAdapter<String> adapter; 

    List<String> stringOfFavWords; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved) 
    { 
     adapter = new ArrayAdapter<String>( 
       inflater.getContext(), R.layout.row, stringOfFavWords); 
       setListAdapter(adapter); 

     return super.onCreateView(inflater, group, saved); 
    } 

    @Override 
    public void onActivityCreated (Bundle savedInstanceState) 
    { 
     super.onActivityCreated(savedInstanceState); 
    } 

} 
+0

में रखते आप कृपया कुछ कोड दिखाते हैं, तुम क्या किया है?और आपने कौन सा बटन एक्शनबार में जोड़ा है –

+0

बिराज जलावाडिया का उत्तर एक बहुत ही खराब डिजाइन दृष्टिकोण है। उनके उत्तर पर मेरी टिप्पणी देखें। – Squonk

उत्तर

20

आप आसानी से इस का उपयोग करते हुए इंटरफ़ेस

MainActivity.java प्राप्त कर सकते हैं

public class MainActivity extends Activity { 

    public FragmentRefreshListener getFragmentRefreshListener() { 
     return fragmentRefreshListener; 
    } 

    public void setFragmentRefreshListener(FragmentRefreshListener fragmentRefreshListener) { 
     this.fragmentRefreshListener = fragmentRefreshListener; 
    } 

    private FragmentRefreshListener fragmentRefreshListener; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     Button b = (Button)findViewById(R.id.btnRefreshFragment); 

     b.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       if(getFragmentRefreshListener()!=null){ 
        getFragmentRefreshListener().onRefresh(); 
       } 
      } 
     }); 


    } 


    public interface FragmentRefreshListener{ 
     void onRefresh(); 
    } 

} 

MyFragment.java

public class MyFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = null; // some view 

     /// Your Code 


     ((MainActivity)getActivity()).setFragmentRefreshListener(new MainActivity.FragmentRefreshListener() { 
      @Override 
      public void onRefresh() { 

       // Refresh Your Fragment 
      } 
     }); 


     return v; 
    } 
} 
+1

धन्यवाद, यह सिर्फ चाल है। – user1319668

+1

यह चीजों को करने का पूरी तरह गलत तरीका है। एक 'फ्रैगमेंट' को * किस प्रकार 'गतिविधि' से जुड़ा हुआ है, इस बारे में * कभी नहीं पता होना चाहिए। विशेष रूप से, यदि 'फ्रैगमेंट' स्वयं निहित और पुन: प्रयोज्य होना है, तो 'गतिविधि' ने किसी विशेष इंटरफ़ेस को परिभाषित करने की कोई गारंटी कैसे दी जा सकती है? संक्षिप्त उत्तर - यह नहीं कर सकता। – Squonk

+2

@ Squonk आतंक न पाएं दोस्त दोस्त हो सकता है। सावधानी से प्रश्न पढ़ें। उन्होंने स्पष्ट रूप से लिखा था कि मैं MainActivity.java से खंड को ताज़ा करना चाहता हूं। उसने यह नहीं बताया कि उसका टुकड़ा सामान्य है। तो मैं जो उत्तर पोस्ट करता हूं वह सामान्य उद्देश्य के लिए प्रश्न से संबंधित नहीं है। यदि आपके पास बेहतर दृष्टिकोण है तो कृपया बहस करना पोस्ट करें। –

5
  • बस अपने अद्यतन/रीफ्रेश विधि सार्वजनिक और फोन करना यह आपकी गतिविधि से है।

या

  • उपयोग LocalBroadcastManager या EventBus अपनी गतिविधि से घटना को भेजने के लिए, और एक टुकड़ा में इस घटना के लिए सदस्यता लेने के द्वारा - यह करने के लिए प्रतिक्रिया और ताज़ा/अद्यतन विधि कॉल।
+0

सार्वजनिक विधि का उपयोग करने के लिए 'फ्रैगमेंट' को 'गतिविधि' का आंतरिक वर्ग होना आवश्यक नहीं है। जब तक 'गतिविधि' में 'फ्रैगमेंट' उदाहरण का संदर्भ होता है, तब तक यह 'फ्रैगमेंट' में किसी भी सार्वजनिक विधि को कॉल कर सकता है। – Squonk

+0

सही! मेरा बुरा ... – localhost

0

जब आप किसी भी बटन पर एक्शनबार पर क्लिक करते हैं तो सूचीफ्रैगमेंट को रीफ्रेश करने के लिए इंटरफ़ेस पर कॉल करें। क्योंकि जावा इंटरफ़ेस में अंतर-संचार के लिए उपयोग किया जाता है।

0

Biraj Zalavadia का जवाब है 100% सही है, तो आप कॉल करेंगे इंटरफेस का उपयोग करने से ना टुकड़े के तरीके .... इस इंटरफ़ेस विधियों को बिना त्रुटि के चल रहा है ...

उपरोक्त उत्पत्ति में इसका उपयोग निजी फ्रैगमेंट रीफ्रेश लिस्टनर खंड RefreshListener;

public FragmentRefreshListener getFragmentRefreshListener() { 
    return fragmentRefreshListener; 
} 

public void setFragmentRefreshListener(
     FragmentRefreshListener fragmentRefreshListener) { 
    this.fragmentRefreshListener = fragmentRefreshListener; 
} 
गतिविधि

private void refreshcall(String result2) { 
    // TODO Auto-generated method stub 
    if (getFragmentRefreshListener() != null) { 
     getFragmentRefreshListener().onRefresh(result2); 
    } 

} 

के अंदर

और जरूरत टुकड़ा

private FragmentRefreshListener fragmentRefreshListener; 

    public FragmentRefreshListener getFragmentRefreshListener() { 
     return fragmentRefreshListener; 
    } 

    public void setFragmentRefreshListener(
      FragmentRefreshListener fragmentRefreshListener) { 
     this.fragmentRefreshListener = fragmentRefreshListener; 
    } 
संबंधित मुद्दे