我正在开发一个动态生成片段的应用程序。
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());
}
请建议我从所有片段中获取所有值时需要做些什么。
答案 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();
谢谢:)
答案 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()中实现的接口的方法。