6

के साथ छोड़ दिया करने के लिए मैं वादा करता हूँ पिछले प्रश्न से तो जोड़े यह आखिरी सवाल मैं टैब के बारे में है हो जाएगा, :) (शायद) और कोशिश करते हैं और त्रुटि मैं FragmentPagerAdapter PagerAdapter जो कुछ टैब बनाता है और भी देता है कहा जाता है मुझे गतिशील रूप से नए टैब बनाने की क्षमता। समस्या यह है कि नए टैब हमेशा अपने मौजूदा टैब के दाईं ओर डाला जाएगा है:टैब FragmentPagerAdapter

(चित्र:

  1. "का एक स्थिर प्रविष्टि जोड़ें: http://s7.directupload.net/file/d/3198/73dyzvzv_png.htm

    मैं निम्नलिखित की कोशिश की नल "को टैब के आंशिक सेट को बनाते समय छोड़ दिया जाएगा। बाद में जब" टेम्प टैब "बनाते हुए मैं उस प्रविष्टि को जो भी टुकड़ा चाहता था उसे ओवरराइड कर सकता था। मुझे कुछ अजीब अवैध अलेक्स्ट एक्सेप्शन दिया गया ...

  2. 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 

जब मैं अस्थायी टुकड़ा जोड़ने की कोशिश करता हूं। अब, दो सवाल:

  1. वहाँ कि टुकड़ा टैब चारों ओर एक रास्ता है, मैं एक पल के लिए दूर सब टुकड़ा टैग लेते हैं और उन्हें सभी या कुछ और के पुनर्निर्माण कर सकते हैं? या

  2. क्या ऐसा करने के लिए कोई बेहतर और सुरुचिपूर्ण तरीका है? या क्या मुझे बस अपना यूआई फिर से डिजाइन करना चाहिए ताकि टैब को दाईं ओर इस्तेमाल किया जा सके? : पी

संपादित करें: यहाँ कुछ कोड: (मैं चाहता हूँ सिर्फ एक दीवार मौत के लोगों के लिए है, क्योंकि यह उन्हें बंद डरा सकता है उसे पोस्ट न करें: ओ)

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) 
+0

पोस्ट अपने पूरे कोड और संभव पोस्ट करता है, तो पूरे स्टैक ट्रेस – Triode

+0

हो गया। AddAragment फ़ंक्शन में मुख्य गतिविधि (जिसमें सभी टैब प्रबंधन होते हैं) और पेजर एडाप्टर – AreusAstarte

+0

जोड़ा गया है, इस कोड को mFragments.add (खंड) में बदलें। mFragments.add (0, खंड) के लिए; इस। – Triode

उत्तर

0

मैं OnPageChangeListener की पेज चयन विधि पर ओवरराइड करके इसे प्राप्त कर सकता हूं। विचार करें कि इस आदेश में आपके पास तीन पृष्ठ हैं < -> बी < -> सी। लक्ष्य के लिए सी तक पहुंचना है यदि हम ए से सीधे स्क्रॉल करते हैं और इसी तरह ए तक पहुंचने के लिए यदि हम सी से बाएं स्क्रॉल करते हैं।

ऐसा करने के लिए परिभाषित अपने 5 पृष्ठों (3 + 2) है, और इस प्रकार पृष्ठों को व्यवस्थित करने के:

सी < -> एक < -> बी < -> सी < -> एक

अब ऑनपेज चयन विधि में, जांचें और 0 यदि स्थिति 0 है, तो इसे 3 (getCount() - 2) में बदलें और यदि स्थिति 4 है (getCount() - 1), इसे 1 तक बदलें। इस तरह से सुनिश्चित करें आपकी मदद करो

धन्यवाद

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