【问题标题】:How to pass a string between fragments in a viewpager如何在 viewpager 中的片段之间传递字符串
【发布时间】:2013-08-28 15:56:49
【问题描述】:

我试图在 viewpager 中的两个片段之间传递一个字符串,但我没有找到正确的方法。 到目前为止,这是我的代码:

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{

    final int PAGE_COUNT = 6;

    /** Constructor of the class */
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    /** This method will be invoked when a page is requested to create */
    @Override
    public Fragment getItem(int arg0) {


        switch (arg0) {
        case 0:
            return new MyFragment();
        case 1:
            return new part2();
        case 2:
            return new Part3();
        case 3:
            return new Part4();
        case 4:
            return new Part5();
        case 5:
            return new Part6();
        default:
            return null;
        }
    }

    /** Returns the number of pages */
    @Override
    public int getCount() {     
        return PAGE_COUNT;
    }

    @Override
    public CharSequence getPageTitle(int position) {        
        return "Page #" + ( position + 1 );
    }





}

public class MainActivity extends FragmentActivity {

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

        /** Getting a reference to the ViewPager defined the layout file */        
        ViewPager pager = (ViewPager) findViewById(R.id.pager);

        /** Getting fragment manager */
        FragmentManager fm = getSupportFragmentManager();

        /** Instantiating FragmentPagerAdapter */
        MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm);

        /** Setting the pagerAdapter to the pager object */
        pager.setAdapter(pagerAdapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

我没有在 viewpager 中使用标签。我应该在片段中写什么?

更新: 我尝试实现答案中建议的接口:

public interface OnTogglePressListener {
    public void onTogglePressed(String msg);
}

在第一个片段上:

@Override
public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        try {
            buttonListener = (OnTogglePressListener) getActivity();
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement onTogglePressed");
        }
        super.onAttach(activity);
    }

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        buttonListener.onTogglePressed("Off");
... }

关于第二个片段:

public String getEtat(String etat)
    {   state =etat;
        return etat;

    }

关于主要活动:

public void onTogglePressed(String etat)
    {
        Part5 p = (Part5)getSupportFragmentManager().findFragmentById(R.layout.frag_2);
        p.getEtat(etat);

    }

但我每次都收到 NullPointerException。

【问题讨论】:

  • 你初始化你的界面了吗?尝试从您的接口创建一个对象,然后在 onActivityCreated() 回调函数上实例化您的接口对象,例如:InterfaceInstance = (onTogglePressListener)getActivity();

标签: android android-fragments android-viewpager


【解决方案1】:

您显然正在使用 ViewPager,您可以利用它。您可以像这样向 ViewPager 添加标签:

活动:

pager.setTag("some text");  // pager is a ViewPager object

然后您可以通过 ViewGroup 在片段中获取这些数据,如下所示:

片段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view =  inflater.inflate(R.layout.fragment_main, container, false);

    String result = container.getTag().toString();
    // do something with the result

    return view;

你也可以 setTag() 到片段中的容器。

这是我发现的在片段及其母活动之间发送数据的最简洁的解决方案。另一种解决方案(目前未在此处提及)是通过 SharedPreferences 发送数据,但我建议尽可能使用标签。

【讨论】:

    【解决方案2】:

    所以我找到了解决方案,实现是正确的,我唯一应该在第二个片段的方法中做我想要的处理,就是这样!

    【讨论】:

    • 它可以工作,但这不是最好的方法,这个解决方案在 ViewPager 上不起作用!
    • 糟糕的答案,考虑修改和更改所选答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    相关资源
    最近更新 更多