【问题标题】:Change multiple fragments from ONE ActionTab从 ONE ActionTab 更改多个片段
【发布时间】:2014-02-06 05:53:12
【问题描述】:

我已经多次尝试将两个片段添加到一个操作选项卡中。当我按下操作选项卡“搜索”时,我想加载一个片段,当我 滑动时它会转到第二个片段在Action选项卡下。请在我使用的代码下方找到。

MainActivity.java

package com.example.swipetabs;
import com.tabs.*;
import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.widget.ImageView;
import com.comparenow.*;

public class MainActivity extends FragmentActivity implements TabListener {

    ActionBar action_bar;
    ViewPager viewPager;
    ImageView creditCards;
    Fragment fragement;
    Fragment fragement1;
    Fragment fragement2;


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

        viewPager=(ViewPager)findViewById(R.id.pager);


        viewPager.setAdapter(new MyAdoptor(getSupportFragmentManager()));
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

            @Override
            public void onPageSelected(int arg0) {
                // TODO Auto-generated method stub
                action_bar.setSelectedNavigationItem(arg0);

            }

            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onPageScrollStateChanged(int arg0) {
                // TODO Auto-generated method stub

            }
        });

        action_bar=getActionBar();
        //action_bar.setBackgroundDrawable(d)
        action_bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        ActionBar.Tab tab1=action_bar.newTab();
        tab1.setText("Login");

        tab1.setTabListener(this);

        ActionBar.Tab tab2=action_bar.newTab();
        tab2.setText("Compare Now");
        tab2.setTabListener(this);

        ActionBar.Tab tab3=action_bar.newTab();
        tab3.setText("Search");
        tab3.setTabListener(this);

        action_bar.addTab(tab1);
        action_bar.addTab(tab2);
        action_bar.addTab(tab3);

    }

    public void switchToFragmentB(){
        viewPager.setCurrentItem(4);
     }

    @Override
    public void onTabReselected(Tab arg0, FragmentTransaction arg1) {
        // TODO Auto-generated method stub


    }

    @Override
    public void onTabSelected(Tab tab, FragmentTransaction ft) {
        // TODO Auto-generated method stub
        //this is the code
        viewPager.setCurrentItem(tab.getPosition());

        String name=(String)tab.getText().toString();

         // compare it to the tab you  would like to do something with        
        if (name == "Search") {
            //load the 1st fragment
            fragement1= new CreditCards();
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(android.R.animator.fade_in,
                            android.R.animator.fade_out)
                    .replace(R.id.store_fragment_container, fragment).commit();

            //load the 2nd fragment
            fragement2 = new Loginfrag();
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(android.R.animator.fade_in,
                            android.R.animator.fade_out)
                    .replace(R.id.imageView1,fragement2).commit();

    }

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

    }


}


class MyAdoptor extends FragmentPagerAdapter
{

    public MyAdoptor(FragmentManager fm) {
        super(fm);
                // TODO Auto-generated constructor stub
    }

    @Override
    public Fragment getItem(int arg0) {
        // TODO Auto-generated method stub

        Fragment fragement=null;
        if(arg0==0)
        {
            fragement=new Loginfrag();
        }
        if(arg0==1)
        {
            fragement=new Comparefrag();
        }
        if(arg0==2)
        {
            fragement=new Searchfrag();
        }



        System.out.print("<><><><>");
        return fragement;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 3;
    }

}

CreditCards.java (Fragment) /Loginfrag .java (Fragement) 两者都是一样的,它也有相应的xml文件。

package com.comparenow;

import com.example.swipetabs.R;
import com.example.swipetabs.R.layout;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class CreditCards extends Fragment {

    public CreditCards() {
        // Required empty public constructor
    }

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

下面的代码段有问题,我不确定它的参数。

fragement1= new CreditCards();
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(android.R.animator.fade_in,
                            android.R.animator.fade_out)
                    .replace(R.id.store_fragment_container, fragment).commit();

            //load the 2nd fragment
            fragement2 = new Loginfrag();
            getFragmentManager().beginTransaction()
                    .setCustomAnimations(android.R.animator.fade_in,
                            android.R.animator.fade_out)
                    .replace(R.id.imageView1,fragement2).commit();

    }

【问题讨论】:

  • 我认为你需要在第一个完成动画之后调用下一个片段,所以需要添加动画监听器 - 见这个链接 - stackoverflow.com/questions/11120372/…
  • @Neha 我只关心在一个操作选项卡下更改片段
  • 如果您确实在一个操作选项卡下更改了多个片段,您面临什么问题?
  • @Neha 我已经发布了我收到错误的代码段。谢谢让我知道。
  • 你在哪里初始化片段..在代码中我可以看到片段1和片段2..片段在哪里?

标签: android


【解决方案1】:

一般来说,我相信您正在寻找的是在 Fragment 内创建 ViewPager ViewPager

您的MainActivity 或多或少是正确的,但您应该忘记onTabSelected()viewPager.setCurrentItem(tab.getPosition()) 下方的所有内容。而不是在寻呼机适配器的getItem() 方法中使用Searchfrag,您将需要为Searchfrag 和您想在“搜索”选项卡中滚动到的任何其他Fragment 创建和使用父Fragment .这个Fragment 可以非常简单,只包含一个ViewPager 和寻呼机适配器。在这个父 Fragment's 寻呼机适配器中,您将编写 getItem() 方法以返回 Searchfrag 为项目 0 和任何其他您想要滚动到项目 1 的片段。这两个 Fragment's 看起来像在“搜索”标签下。

例如,将持有SearchfragFragmentPagerAdapter 和另一个Fragment 应该有一个getItem() 方法,如下所示:

public static class SampleFragmentAdapter extends FragmentPagerAdapter {

    public SampleFragmentAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int arg0) {
        if(arg0 == 0){
            return new Searchfrag();
        } else {
            return new OtherFragmentUnderSearchTab();
        }

    }

    @Override
    public int getCount() {
        return 2;
    }

}

这个父级Fragment(我们称之为ParentFragment)应该在MyAdoptorgetItem() 方法中替换Searchfrag,如下所示:

@Override
public Fragment getItem(int arg0) {
    // TODO Auto-generated method stub

    Fragment fragement=null;
    if(arg0==0)
    {
        fragement=new Loginfrag();
    }
    if(arg0==1)
    {
        fragement=new Comparefrag();
    }
    if(arg0==2)
    {
        fragement=new ParentFragment();
    }



    System.out.print("<><><><>");
    return fragement;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    相关资源
    最近更新 更多