के साथ छोड़ दिया करने के लिए मैं वादा करता हूँ पिछले प्रश्न से तो जोड़े यह आखिरी सवाल मैं टैब के बारे में है हो जाएगा, :) (शायद) और कोशिश करते हैं और त्रुटि मैं FragmentPagerAdapter PagerAdapter जो कुछ टैब बनाता है और भी देता है कहा जाता है मुझे गतिशील रूप से नए टैब बनाने की क्षमता। समस्या यह है कि नए टैब हमेशा अपने मौजूदा टैब के दाईं ओर डाला जाएगा है:टैब FragmentPagerAdapter
(चित्र:
"का एक स्थिर प्रविष्टि जोड़ें:
मैं निम्नलिखित की कोशिश की नल "को टैब के आंशिक सेट को बनाते समय छोड़ दिया जाएगा। बाद में जब" टेम्प टैब "बनाते हुए मैं उस प्रविष्टि को जो भी टुकड़ा चाहता था उसे ओवरराइड कर सकता था। मुझे कुछ अजीब अवैध अलेक्स्ट एक्सेप्शन दिया गया ...
-
private final List<Fragment> mFragments = new ArrayList<Fragment>(); public void addFragment(Fragment fragment) { mFragments.add(fragment); notifyDataSetChanged(); }
mFragments.add(0, fragment);
उपयोग करने के लिए लेकिन यह संदेश के साथ एक IllegalStateException देता है: 0,403,210 बात मैं सबसे अच्छा काम करेगा सोचा और वास्तव में बहुत बुरी तरह से काम करना चाहता था: इसके बजाय साथ टुकड़े जोड़ने की :
Can't change tag of fragment ChatFragment
जब मैं अस्थायी टुकड़ा जोड़ने की कोशिश करता हूं। अब, दो सवाल:
वहाँ कि टुकड़ा टैब चारों ओर एक रास्ता है, मैं एक पल के लिए दूर सब टुकड़ा टैग लेते हैं और उन्हें सभी या कुछ और के पुनर्निर्माण कर सकते हैं? या
क्या ऐसा करने के लिए कोई बेहतर और सुरुचिपूर्ण तरीका है? या क्या मुझे बस अपना यूआई फिर से डिजाइन करना चाहिए ताकि टैब को दाईं ओर इस्तेमाल किया जा सके? : पी
संपादित करें: यहाँ कुछ कोड: (मैं चाहता हूँ सिर्फ एक दीवार मौत के लोगों के लिए है, क्योंकि यह उन्हें बंद डरा सकता है उसे पोस्ट न करें: ओ)
FragmentPagerAdapter:
public class PagerAdapter extends FragmentPagerAdapter {
private Context mContext;
public PagerAdapter(FragmentManager fm, Context context) {
super(fm);
mContext = context;
}
private final List<Fragment> mFragments = new ArrayList<Fragment>();
public void addFragment(Fragment fragment) {
mFragments.add(fragment);
notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
return mFragments.get(position);
}
@Override
public int getCount() {
return mFragments.size();
}
@Override
public String getPageTitle(int position) {
switch (position) {
case 0:
return mContext.getString(R.string.tab_title_chats);
case 1:
return mContext.getString(R.string.tab_title_contacts);
case 2:
return mContext.getString(R.string.tab_title_create);
}
return "WOOPS";
}
}
MainActivty :
public class LaunchActivity extends FragmentActivity implements ActionBar.TabListener {
private PagerAdapter mAdapter;
private FragmentManager man;
private ViewPager mViewPager;
private ActionBar actionBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_container);
// Set up the action bar.
actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
// Layout stuff
mViewPager = (ViewPager) findViewById(R.id.masterViewPager);
// Creating the mAdapter and initializing the mViewPager
man = getSupportFragmentManager();
mAdapter = new PagerAdapter(man, getApplicationContext());
mViewPager.setAdapter(mAdapter);
for (int i = 0; i < 2; i++) {
makeFragments(i);
System.out.println("Baking tasty fragment instances...nom nom nom");
}
// Called when tab changes
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
for (int i = 0; i < mAdapter.getCount(); i++) {
System.out.println("Working...");
actionBar.addTab(actionBar.newTab().setText(mAdapter.getPageTitle(i)).setTabListener(this));
}
}
// Add fragment instances to ArrayList depending on their future position on the ActionBar
private void makeFragments(int i) {
if (i == 0) {
mAdapter.addFragment(ChatFragment.getInstance());
}
else if (i == 1) {
mAdapter.addFragment(ContactFragment.getInstance());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.layout_container, menu);
return true;
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
mViewPager.setCurrentItem(tab.getPosition());
}
public void addTab(int i) {
mAdapter.addFragment(ComposeFragment.getInstance());
System.out.println("Created new Fragment, now adding it as a tab");
actionBar.addTab(actionBar.newTab().setText(mAdapter.getPageTitle(i)).setTabListener(this));
System.out.println("Added it as a tab. Hurray");
}
/** IGNORE BELOW **/
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
}
स्टैकट्रेस:
03-18 18:32:29.274: E/AndroidRuntime(26435): FATAL EXCEPTION: main
03-18 18:32:29.274: E/AndroidRuntime(26435): java.lang.IllegalStateException: Can't change tag of fragment ChatFragment{41492428 #1 id=0x7f070004 android:switcher:2131165188:1}: was android:switcher:2131165188:1 now android:switcher:2131165188:2
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:398)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.app.BackStackRecord.add(BackStackRecord.java:389)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.app.FragmentPagerAdapter.instantiateItem(FragmentPagerAdapter.java:99)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.view.ViewPager.addNewItem(ViewPager.java:801)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.view.ViewPager.populate(ViewPager.java:992)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:523)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:495)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:875)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.view.ViewPager$PagerObserver.onChanged(ViewPager.java:2690)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.database.DataSetObservable.notifyChanged(DataSetObservable.java:37)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:276)
03-18 18:32:29.274: E/AndroidRuntime(26435): at com.package.subpackage.components.PagerAdapter.addFragment(PagerAdapter.java:25)
03-18 18:32:29.274: E/AndroidRuntime(26435): at com.package.subpackage.someapp.core.LaunchActivity.addTab(LaunchActivity.java:116)
03-18 18:32:29.274: E/AndroidRuntime(26435): at com.
com.package.subpackage.fragments.full.ChatFragment$1.onClick(ChatFragment.java:51)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.view.View.performClick(View.java:4204)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.view.View$PerformClick.run(View.java:17355)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.os.Handler.handleCallback(Handler.java:725)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.os.Handler.dispatchMessage(Handler.java:92)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.os.Looper.loop(Looper.java:137)
03-18 18:32:29.274: E/AndroidRuntime(26435): at android.app.ActivityThread.main(ActivityThread.java:5041)
03-18 18:32:29.274: E/AndroidRuntime(26435): at java.lang.reflect.Method.invokeNative(Native Method)
03-18 18:32:29.274: E/AndroidRuntime(26435): at java.lang.reflect.Method.invoke(Method.java:511)
03-18 18:32:29.274: E/AndroidRuntime(26435): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-18 18:32:29.274: E/AndroidRuntime(26435): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-18 18:32:29.274: E/AndroidRuntime(26435): at dalvik.system.NativeStart.main(Native Method)
पोस्ट अपने पूरे कोड और संभव पोस्ट करता है, तो पूरे स्टैक ट्रेस – Triode
हो गया। AddAragment फ़ंक्शन में मुख्य गतिविधि (जिसमें सभी टैब प्रबंधन होते हैं) और पेजर एडाप्टर – AreusAstarte
जोड़ा गया है, इस कोड को mFragments.add (खंड) में बदलें। mFragments.add (0, खंड) के लिए; इस। – Triode