मैं Android में v4 संगतता ViewPager का उपयोग कर रहा हूं। मेरी FragmentActivity में डेटा का एक समूह है, जिसे मेरे ViewPager में विभिन्न पृष्ठों पर विभिन्न तरीकों से प्रदर्शित किया जाना है। अभी तक मेरे पास एक ही ListFragment के 3 उदाहरण हैं, लेकिन भविष्य में मेरे पास अलग-अलग ListFragments के 3 उदाहरण होंगे। ViewPager एक वर्टिकल फोन स्क्रीन पर है, लिस्ट अगल-बगल नहीं हैं।
अब ListFragment पर एक बटन एक अलग पूर्ण-पृष्ठ गतिविधि (FragmentActivity के माध्यम से) शुरू करता है, जो रिटर्न और FragmentActivity डेटा को संशोधित करता है, इसे बचाता है, फिर इसके ViewPager में सभी विचारों को अपडेट करने का प्रयास करता है। यह यहां है, जहां मैं फंस गया हूं।
public class ProgressMainActivity extends FragmentActivity
{
MyAdapter mAdapter;
ViewPager mPager;
@Override
public void onCreate(Bundle savedInstanceState)
{
...
mAdapter = new MyAdapter(getSupportFragmentManager());
mPager = (ViewPager) findViewById(R.id.viewpager);
mPager.setAdapter(mAdapter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
updateFragments();
...
}
public void updateFragments()
{
//Attempt 1:
//mAdapter.notifyDataSetChanged();
//mPager.setAdapter(mAdapter);
//Attempt 2:
//HomeListFragment fragment = (HomeListFragment) getSupportFragmentManager().findFragmentById(mAdapter.fragId[0]);
//fragment.updateDisplay();
}
public static class MyAdapter extends FragmentPagerAdapter implements
TitleProvider
{
int[] fragId = {0,0,0,0,0};
public MyAdapter(FragmentManager fm)
{
super(fm);
}
@Override
public String getTitle(int position){
return titles[position];
}
@Override
public int getCount(){
return titles.length;
}
@Override
public Fragment getItem(int position)
{
Fragment frag = HomeListFragment.newInstance(position);
//Attempt 2:
//fragId[position] = frag.getId();
return frag;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE; //To make notifyDataSetChanged() do something
}
}
public class HomeListFragment extends ListFragment
{
...
public static HomeListFragment newInstance(int num)
{
HomeListFragment f = new HomeListFragment();
...
return f;
}
...
अब जैसा कि आप देख सकते हैं, मेरा पहला प्रयास अधिसूचित किया गया था कि पूरे FragmentPagerAdapter पर DataSetChanged, और यह कभी-कभी डेटा को अपडेट करने के लिए दिखाया गया था, लेकिन दूसरों को मुझे एक IllegalStateException मिली: onSaveInstanceState के बाद यह कार्रवाई नहीं कर सकता।
मेरे दूसरे प्रयास ने अपनी ListFragment में अपडेट फ़ंक्शन को कॉल करने की कोशिश की, लेकिन getIem में getId वापस आ गया। 0. डॉक्स के अनुसार मैंने कोशिश की
FragmentManager से Fragment का संदर्भ प्राप्त करना, findFragmentById () या findFragmentByTag () का उपयोग करके
लेकिन मुझे अपने फ्रैगमेंट्स का टैग या आईडी पता नहीं है! मेरे पास ViewPager के लिए एक android: id = "@ + id / viewpager" है, और ListFragment लेआउट में मेरे ListView के लिए एक android: id = "@ android: id / list" है, लेकिन मुझे नहीं लगता कि ये उपयोगी हैं।
तो, मैं या तो कैसे कर सकता हूं: ए) एक बार में पूरे व्यू पेज को सुरक्षित रूप से अपडेट करें (आदर्श रूप से उपयोगकर्ता को उस पृष्ठ पर वापस लौटा दें) - यह ठीक है कि उपयोगकर्ता को दृश्य परिवर्तन दिखाई देता है। या अधिमानतः, बी) मैन्युअल रूप से सूची दृश्य को अपडेट करने के लिए प्रत्येक प्रभावित ListFragment में एक फ़ंक्शन को कॉल करें।
कोई मदद कृतज्ञता स्वीकार किया जाएगा!
null
टुकड़े के लिए मिलता है।