मैं कई महीनों के लिए अपने ऐप्स में से एक में FragmentStatePagerAdapter का उपयोग कर रहा हूं, और यह बेकार ढंग से काम करता है। मैंने हाल ही में इंटेलिजे आईडीईए पर स्विच किया है और एडीटी 22 में अपडेट किया है और अब एडाप्टर ऐप को मजबूर करने का कारण बनता है जब ऐप टैब को नष्ट करने और नए बनाने की कोशिश करता है।FragmentStatePagerAdapter एडीटी 22 को अपडेट करने के बाद काम करना बंद कर दिया?
सही तरीके से काम करते समय, गतिविधि टैब की श्रृंखला लोड करेगी। उपयोगकर्ता उनके बीच स्वाइप कर सकते हैं। यह सब अभी भी सही ढंग से काम करता है।
ऐप को इन टैब को नष्ट करना चाहिए और उपयोगकर्ता को मेनू में बटन चुनने पर नए बनाना चाहिए। आम तौर पर, यह ठीक काम करता है लेकिन अब यह अचानक काम करना बंद कर दिया है। यहाँ कोड है:
/** TabsAdapter - Make Tabs Swipe-Able, Handle Fragments */
public static class TabsAdapter extends FragmentStatePagerAdapter implements ActionBar.TabListener, ViewPager.OnPageChangeListener {
private final Context mContext;
private final ActionBar mActionBar;
private final ViewPager mViewPager;
private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>();
static final class TabInfo {
private final Class<?> clss;
private final Bundle args;
TabInfo(Class<?> _class, Bundle _args) {
clss = _class;
args = _args;
}
} // end TabInfo
public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) {
super(activity.getSupportFragmentManager());
mContext = activity;
mActionBar = activity.getSupportActionBar();
mViewPager = pager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
} // end TabsAdapter
public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) {
TabInfo info = new TabInfo(clss, args);
tab.setTag(info);
tab.setTabListener(this);
mTabs.add(info);
mActionBar.addTab(tab);
notifyDataSetChanged();
} // end addTab
public void removeTab(ActionBar.Tab tab) {
mTabs.remove(tab.getTag());
mActionBar.removeTab(tab);
notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
return TabsAdapter.POSITION_NONE;
}
@Override
public int getCount() {
return mTabs.size();
} // end getCount()
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.clss.getName(), info.args);
} // end getItem()
@Override
public void onPageScrolled(int position, float positionOffest, int postionOffsetPixels){
} // end onPageScrolled
@Override
public void onPageSelected(int position) {
mActionBar.setSelectedNavigationItem(position);
} // end onPageSelected
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
Object tag = tab.getTag();
for (int i = 0; i < mTabs.size(); i++) {
if (mTabs.get(i) == tag) {
mViewPager.setCurrentItem(i);
}
}
} // end onTabSelected
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft){} // end onTabUnselected
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft){} // end onTabReselected
@Override
public void onPageScrollStateChanged(int arg0) {}
} // end TabsAdapter
onCreate के दौरान(), मैं एक विधि कॉल, चलो यह CreateTabs1() फोन, और इसे सफलतापूर्वक टैब बनाता है और उपयोगकर्ता स्वाइप कर सकते हैं। यह तभी होता है जब पेजर टैब को नष्ट करने और नए बनाने की कोशिश करता है कि अब यह अचानक विफल हो जाता है, भले ही मैं CreateTabs1() को फिर से कॉल करता हूं। फिर, यह हमेशा पहले बेकार काम किया।
यहाँ लॉग है:
05-25 23:41:24.857: ERROR/AndroidRuntime(27290): FATAL EXCEPTION: main
java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 11, found: 10 Pager id: com.######:id/pager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.#####.######.#####$TabsAdapter
at android.support.v4.view.ViewPager.populate(ViewPager.java:959)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:548)
at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:507)
at android.support.v4.view.ViewPager.setCurrentItem(ViewPager.java:488)
at com.#####.#####.#####$TabsAdapter.onTabSelected(#####.java:215)
at com.actionbarsherlock.internal.app.ActionBarWrapper$TabWrapper.onTabSelected(ActionBarWrapper.java:356)
at com.android.internal.app.ActionBarImpl.selectTab(ActionBarImpl.java:570)
at com.android.internal.app.ActionBarImpl.removeTabAt(ActionBarImpl.java:544)
at com.android.internal.app.ActionBarImpl.removeTab(ActionBarImpl.java:520)
at com.actionbarsherlock.internal.app.ActionBarWrapper.removeTab(ActionBarWrapper.java:409)
at com.#####.#####.#####$TabsAdapter.removeTab(#####.java:181)
at com.#####.#####.#####.tabDrop(#####.java:381)
at com.#####.#####.#####.onOptionsItemSelected(#####.java:459)
at android.support.v4.app.Watson.onMenuItemSelected(Watson.java:118)
at com.actionbarsherlock.ActionBarSherlock.callbackOptionsItemSelected(ActionBarSherlock.java:603)
at com.actionbarsherlock.internal.ActionBarSherlockNative.dispatchOptionsItemSelected(ActionBarSherlockNative.java:93)
at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:205)
at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:980)
at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
at com.android.internal.view.menu.SubMenuBuilder.dispatchMenuItemSelected(SubMenuBuilder.java:81)
at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
at com.android.internal.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:156)
at android.widget.AdapterView.performItemClick(AdapterView.java:298)
at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
at android.widget.AbsListView$1.run(AbsListView.java:3423)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
http://stackoverflow.com/questions/16636039/java-lang-classnotfoundexception-after-changing-nothing-in-the-project-but-upgra/16636127#16636127 यह कोशिश अगर यह मदद करता है – Raghunandan
है एक परियोजना को साफ करने और IntelliJ में इसे पुनर्निर्माण करने का कोई तरीका है? यह ग्रहण उपयोगकर्ताओं के लिए एक समाधान प्रतीत होता है। इसके अलावा, अगर यह मदद करता है, तो ऐप सही तरीके से बनाता है और अन्यथा चलता है और ठीक काम करता है। यह एक चीज केवल असफल होने लगती है। – Ninjalan
नहीं, मैंने इंटेलिज का उपयोग नहीं किया है। मुझे उस – Raghunandan