2013-06-20 10 views
10

मैं टुकड़ों का उपयोग कर एक टैब एप्लिकेशन बना रहा हूं।कौन सा टुकड़ा चुना गया है

मैंने सफलतापूर्वक टैब बनाए हैं, लेकिन अब जब कोई विशिष्ट टुकड़ा चुना जाता है तो मुझे ऑब्जेक्ट बनाने की आवश्यकता होती है। जैसे जब मैं SettingsTab चुनता हूं तो मुझे Test class में परिभाषित एक फ़ंक्शन को कॉल करने की आवश्यकता होती है। और इसी तरह नष्ट

// SettingsTab 
package com.example.sensorspositioningn; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class SettingsTab extends Fragment { 

    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.settingstab, container, false); 

    } 
} 

यहाँ MainActivity में कोड है:

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     appContext = getApplicationContext(); 

     //ActionBar 
     ActionBar actionbar = getActionBar(); 
     actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     ActionBar.Tab Tab1= actionbar.newTab().setText("Tab1"); 
     ActionBar.Tab Tab2= actionbar.newTab().setText("Tab2"); 
     ActionBar.Tab Tab3= actionbar.newTab().setText("Tab3"); 
     ActionBar.Tab SettingsTab = actionbar.newTab().setText("Settings"); 

     Fragment Tab1F= new Tab1(); 
     Fragment Tab2F= new Tab2(); 
     Fragment Tab3F= new Tab3(); 
     Fragment mSettingsFragment = new SettingsTab(); 

     Tab1.setTabListener(new MyTabsListener(Tab1F)); 
     Tab1.setTabListener(new MyTabsListener(Tab2F)); 
     Tab1.setTabListener(new MyTabsListener(Tab3F)); 
     SettingsTab.setTabListener(new MyTabsListener(mSettingsFragment)); 

     actionbar.addTab(Tab1); 
     actionbar.addTab(Tab2); 
     actionbar.addTab(Tab3); 
     actionbar.addTab(SettingsTab); 


    } 
protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("tab", getActionBar().getSelectedNavigationIndex()); 
    } 

class MyTabsListener implements ActionBar.TabListener { 
     public Fragment fragment; 

     public MyTabsListener(Fragment fragment) { 
      this.fragment = fragment; 
     } 


     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      Toast.makeText(MainActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show(); 
     } 


     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      ft.replace(R.id.fragment_container, fragment); 




     } 


     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      ft.remove(fragment); 


     } 
    } 
+0

कृपया अपने प्रश्न की व्याख्या करें, स्पष्ट रूप से आप क्या चाहते थे? –

उत्तर

7

में अपने ActionBar.TabListener आप यह कर सकते हैं - (मैं यह सोचते कर रहा हूँ कि आप वस्तु की जरूरत Activity में होना)

class MyTabsListener implements ActionBar.TabListener { 
    public Fragment fragment; 

    public MyTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
    } 


    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     Toast.makeText(MainActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show(); 
    } 


    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.replace(R.id.fragment_container, fragment); 

     if(fragment instanceof SettingsTab) { 
      // Create your object, call your function 
     } 
    } 


    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     ft.remove(fragment); 

     if(fragment instanceof SettingsTab) { 
      // Destroy your object 
     } 
    } 
} 
2

इस

public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.replace(R.id.fragment_container, fragment); 

     if(fragment instanceof SettingsTab){ 
      doSettingsMethod(); 
     } 

     if(fragment instanceof Tab1){ 
      doOtherMethod1(); 
     } 

     if(fragment instanceof Tab2){ 
      doOtherMethod2(); 
     } 

     if(fragment instanceof Tab3){ 
      doOtherMethod3(); 
     } 
    } 

इसके अलावा आप इस तरह से TabListener वर्ग बदल सकते हैं की कोशिश करो। मेरे लिए यह एक बेहतर डिजाइन है।

class MyTabsListener implements ActionBar.TabListener { 
    public Fragment fragment; 
    private final Runnable onSelect; 

    public MyTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
     this.onSelect = null; 
    } 

    public MyTabsListener(Fragment fragment, Runnable onSelect) { 
     this.fragment = fragment; 
     this.onSelect = onSelect; 
    } 


    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     Toast.makeText(MainActivity.appContext, "Reselected!", Toast.LENGTH_LONG).show(); 
    } 


    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     ft.replace(R.id.fragment_container, fragment); 
     if(onSelect != null){ 
      fragment.getActivity().runOnUiThread(onSelect); 
     } 
    } 


    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     ft.remove(fragment); 


    } 
} 
2

केवल आधिकारिक स्रोत मैं इस पाया डेवलपर पर था साइट: http://developer.android.com/training/implementing-navigation/lateral.html

वे बस प्रत्येक निर्मित टुकड़े के लिए तर्क डालते हैं, और जब टुकड़े चुने जाते हैं तो तर्क पढ़ते हैं।

0

डिफ़ॉल्ट रूप से यदि आप कोई टैब चुनते हैं तो इसे हाइलाइट किया जाएगा। यदि आप स्पष्ट रूप से चुनना चाहते हैं तो आपके निर्दिष्ट टैब इंडेक्स स्थिति के साथ दिए गए टिप्पणी कोड का उपयोग TabSelected (TabLayout.Tab टैब) के अंतर्गत करें। यह कोड व्यूपार्जर का उपयोग कर टैब चयनित स्थिति पर परिवर्तन खंड के बारे में बताएगा।

public class GalleryFragment extends Fragment implements TabLayout.OnTabSelectedListener 
{ 
private ViewPager viewPager;public ViewPagerAdapter adapter;private TabLayout tabLayout; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
View rootView = inflater.inflate(R.layout.fragment_gallery, container, false); 
viewPager = (ViewPager) rootView.findViewById(R.id.viewpager); 
adapter = new ViewPagerAdapter(getChildFragmentManager()); 
adapter.addFragment(new PaymentCardFragment(), "PAYMENT CARDS"); 
adapter.addFragment(new LoyaltyCardFragment(), "LOYALTY CARDS"); 
viewPager.setAdapter(adapter); 
tabLayout = (TabLayout) rootView.findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.setOnTabSelectedListener(this); 
} 

@Override 
public void onTabSelected(TabLayout.Tab tab) { 
    //This will be called 2nd when you select a tab or swipe using viewpager 
    final int position = tab.getPosition(); 
    Log.i("card", "Tablayout pos: " + position); 
    //TabLayout.Tab tabdata=tabLayout.getTabAt(position); 
    //tabdata.select(); 
    tabLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      if (position == 0) { 
       PaymentCardFragment paymentCardFragment = getPaymentCardFragment(); 
       if (paymentCardFragment != null) { 
        VerticalViewpager vp = paymentCardFragment.mypager; 
        if(vp!=null) 
        { 
         //vp.setCurrentItem(position,true); 
         vp.setCurrentItem(vp.getAdapter().getCount()-1,true); 
        } 
        } 
      } 
      if (position == 1) { 
       LoyaltyCardFragment loyaltyCardFragment = getLoyaltyCardFragment(); 
       if (loyaltyCardFragment != null) { 
        VerticalViewpager vp = loyaltyCardFragment.mypager; 
        if(vp!=null) 
        { 
         vp.setCurrentItem(position); 
        } 
        } 
      } 
     } 
    }); 
} 

@Override 
public void onTabUnselected(TabLayout.Tab tab) { 
//This will be called 1st when you select a tab or swipe using viewpager 
} 
@Override 
public void onTabReselected(TabLayout.Tab tab) { 
    //This will be called only when you select the already selected tab(Ex: selecting 3rd tab again and again) 
} 
private PaymentCardFragment getLoyaltyCardFragment() { 
    Fragment f = adapter.mFragmentList.get(viewPager.getCurrentItem()); 

    if(f instanceof PaymentCardFragment) 
    { 
    return (PaymentCardFragment) f; 
    } 
    return null; 
} 
private LoyaltyCardFragment getPaymentCardFragment() { 
    Fragment f = adapter.mFragmentList.get(viewPager.getCurrentItem()); 
    if(f instanceof LoyaltyCardFragment) 
    { 
    return (LoyaltyCardFragment) f; 
    } 
    return null; 
} 
    class ViewPagerAdapter extends FragmentPagerAdapter { 
    public List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 
    public void addFragment(Fragment fragment, String title) { 
    mFragmentList.add(fragment); 
    mFragmentTitleList.add(title); 
    } 
} 
} 
संबंधित मुद्दे