簡體   English   中英

如何使用ActionBarSherlock在同一選項卡上使用新片段更改選項卡的片段

[英]How to change the fragment of a Tab with a new fragment on the same tab with ActionBarSherlock

我對這個很棒的圖書館有疑問。 我有一個帶有4個標簽的MainActivity:

public class MainActivity extends SherlockFragmentActivity {

// Declare Variables
ActionBar mActionBar;
ViewPager mPager;
Tab tab;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Get the view from activity_main.xml

    SharedPreferences pref= getSharedPreferences("wizard", 0);
    SharedPreferences.Editor editor = pref.edit();
    String isOkWizard= pref.getString("isOkWizard", null); //prelevo lo stato dello wizard
    if(isOkWizard!=null){
        //abilita tutto
    }else{
        Toast.makeText(this, "" 
    }
    setContentView(R.layout.activity_main);
    //toggleFullscreen(true);
   // setTheme(R.style.Theme_Sherlock_NoActionBar);
    // Activate Navigation Mode Tabs
    mActionBar = getSupportActionBar();
    mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    // Locate ViewPager in activity_main.xml
    mPager = (ViewPager) findViewById(R.id.pager);

    // Activate Fragment Manager
    FragmentManager fm = getSupportFragmentManager();

    // Capture ViewPager page swipes
    ViewPager.SimpleOnPageChangeListener ViewPagerListener = new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            super.onPageSelected(position);
            // Find the ViewPager Position
            mActionBar.setSelectedNavigationItem(position);
        }
    };

    mPager.setOnPageChangeListener(ViewPagerListener);
    // Locate the adapter class called ViewPagerAdapter.java
    ViewPagerAdapter viewpageradapter = new ViewPagerAdapter(fm);
    // Set the View Pager Adapter into ViewPager
    mPager.setAdapter(viewpageradapter);

    // Capture tab button clicks
    ActionBar.TabListener tabListener = new ActionBar.TabListener() {

        @Override
        public void onTabSelected(Tab tab, FragmentTransaction ft) {
            // Pass the position on tab click to ViewPager
            mPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onTabReselected(Tab tab, FragmentTransaction ft) {
            // TODO Auto-generated method stub
        }
    };

    // Create first Tab
    tab = mActionBar.newTab().setText("Tab1").setTabListener(tabListener);
    mActionBar.addTab(tab);

    // Create second Tab
    tab = mActionBar.newTab().setText("Tab2").setTabListener(tabListener);
    mActionBar.addTab(tab);

    // Create third Tab
    tab = mActionBar.newTab().setText("Tab3").setTabListener(tabListener);
    mActionBar.addTab(tab);

 // Create 4 Tab
    tab = mActionBar.newTab().setText("Tab4").setTabListener(tabListener);
    mActionBar.addTab(tab);

}

現在在第一個選項卡中,我有一個Fragment1,其中有5個按鈕可打開一個新片段。 我的問題是用從按鈕偵聽器調用的新片段替換此片段。 這是我的第一個標簽的fragment1:

public class FragmentTab1 extends SherlockFragment {

    static Context context;

        @Override
        public SherlockFragmentActivity getSherlockActivity() {
            return super.getSherlockActivity();
        }

        @Override
        public void onViewCreated(View view, Bundle savedInstanceState) {
            super.onViewCreated(view, savedInstanceState);

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // Get the view from fragmenttab1.xml


         //     View view = inflater.inflate(R.layout.fragmenttab1, container, false);
            RelativeLayout view = (RelativeLayout) inflater.inflate(R.layout.fragmenttab1,
                    container, false);
            context=getActivity();
            Button guasti = (Button) view.findViewById(R.id.bGuasti);
            Button segnala = (Button) view.findViewById(R.id.segnalaDisservizio);
            guasti.setOnClickListener(new OnClickListener() {

                    @Override
                public void onClick(View arg0) {
                    Fragment newFragment = new FragmentTab2();
                    FragmentTransaction transaction = getFragmentManager().beginTransaction();

                    // Replace whatever is in the fragment_container view with this fragment,
                    // and add the transaction to the back stack
                    transaction.replace(R.id.fragment1, newFragment);
                    transaction.addToBackStack(null);

                    // Commit the transaction
                    transaction.commit();

                }
            });

            segnala.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    if(hasConnection()){
                    Intent i= new Intent(getActivity(), SegnalaDisservizioActivity.class);
                    i.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                    startActivity(i);
                    }else{
                        Toast.makeText(context, "Devi avere una connessione attiva per usurfruire del servizio", 3000).show();
                    }
                }
            });
            return view;
        }

        public static boolean hasConnection() {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

            NetworkInfo wifiNetwork = cm
                    .getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            if (wifiNetwork != null && wifiNetwork.isConnected()) {
                return true;
            }

            NetworkInfo mobileNetwork = cm
                    .getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
            if (mobileNetwork != null && mobileNetwork.isConnected()) {
                return true;
            }

            NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
            if (activeNetwork != null && activeNetwork.isConnected()) {
                return true;
            }

            return false;
        }

        @Override
        public void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            setUserVisibleHint(true);
        }

我相信您的所有5個片段都可以通過ViewPagerAdapter進行管理。

在您的活動中定義一個公共方法,例如

//tabNumber from 0 to 4
public void nextPage(int tabNumber)
{
   mPager.setCurrentItem(tabNumber);
}

然后從您的片段中調用

int tab =1; //or any number
MainActivity mainActivity = (MainActivity)getActivity();
mainActivity.nextPage(tab);   

您的片段將自動移至指定編號。

我建議你下載從JakeWharton視圖尋呼機演示應用程序在這里和源代碼相同的位置 下次當您陷入困境時,您只需檢查該應用程序的必需功能,並向船長學習即可。

編輯!!!

如果要完全替換該片段,則應在適配器中進行管理,或者不應該使用View pager。

有關片段演示,請在此處查看此應用源代碼

檢查此問題是否符合您的要求。 無論如何,請嘗試使您的問題盡可能清楚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM