从ViewPager

时间:2016-04-25 04:09:21

标签: android android-fragments android-viewpager

我正在开发一个动态生成片段的应用程序。

private void setupViewPager(ViewPager viewPager) {
    adapter = new ViewPagerAdapter(getSupportFragmentManager());
    for (int i = 0; i < sequence_no.size(); i++) 
    {
        adapter.addFragment(FragmentTwo.newInstance(i,(i+1)));
    }
    viewPager.setAdapter(adapter);
}

现在假设生成了三个片段。 生成的片段确实有不同的小部件,如edittext,spinner等。 我做的是mannage,因为我有一个标志通知我要显示哪一个(旋转器或edittext)。

我有一个活动按钮,点击后我需要从所有碎片中获取值,以及我是如何从第一个碎片获取值的。

我在这里放了一个错误的样本,因为我知道它错了,但我仍然是为了参考目的。

下面是提交按钮上的代码,单击其中值是数组列表。

if (FragmentTwo.ed_complain != null) 
    {
        values.add(FragmentTwo.ed_complain.getText().toString());
    }
    if (FragmentTwo.cb_complain != null) 
    {
        values.add(FragmentTwo.cb_complain.getText().toString());
    }
    if (FragmentTwo.spinner_complain != null && FragmentTwo.spinner_complain.getSelectedItem() != null) 
    {
        values.add(FragmentTwo.spinner_complain.getSelectedItem().toString());
    }

请建议我从所有片段中获取所有值时需要做些什么。

4 个答案:

答案 0 :(得分:3)

您可以使用这种方式解决此问题。 创建一个Interface并在每个片段中实现它。现在使用此Interface,您可以从特定片段中获取值。

例如,您创建了Interface

public interface IGetValue{
String getEditTextValue();
}

现在,如果每个Fragment都实现了这个接口,那么每个片段都必须实现这个getEditTextValue()方法,你可以返回该实现方法的EditText值。只需使用:

@Override
public String getEditTextValue() {

    return YOUR_EDIT_TEXT.getText().toString();
}

现在,如果您想在活动中从EditText获取Fragment1值,请使用以下代码行:

String valueFromFragment1= fragment1Instance.getEditTextValue();

有关详情,请查看thisthis回答。

谢谢:)

答案 1 :(得分:0)

使用Bundle

将变量放入Bundle: -

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putString(key, value);
fragment.setArguments(bundle);

从包中检索变量: -

Bundle bundle = this.getArguments();
String myTxt = bundle.getInt(key, defaultValue);

答案 2 :(得分:0)

在您的代码中,您将片段添加到适配器,将该片段存储在ArrayList

ArrayList<Fragment> allMyFrags=new ArrayList<Fragment>();
private void setupViewPager(ViewPager viewPager) {
    adapter = new ViewPagerAdapter(getSupportFragmentManager());
    for (int i = 0; i < sequence_no.size(); i++) 
    {
        Fragment mFrag=FragmentTwo.newInstance(i,(i+1));
        allMyFrags.add(mFrag);
        adapter.addFragment(mFrag);
    }
    viewPager.setAdapter(adapter);
}

稍后在您的代码中,只要您想获取数据,将该数组放入for循环并获取所需的数据

答案 3 :(得分:0)

谢谢你们:) 在这里,我借助Md.Sajedul Karim和Smartiz的答案分享了我得到的解决方案。

for(int i=0;i<allMyFrags.size();i++)
    {
        FragmentTwo fragment = (FragmentTwo) adapter.getItem(i);    
        Log.e("Value",fragment.getEditTextValue());
        values.add(fragment.getEditTextValue());
    }

其中getEdittextValue()是FragmentTwo()中实现的接口的方法。