【问题标题】:Getting the values from the different fragments from ViewPager从 ViewPager 获取不同片段的值
【发布时间】:2016-04-25 14:22:24
【问题描述】:

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

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);
}

现在假设确实生成了三个片段。 生成的片段确实有不同的小部件,如编辑文本、微调器等。 我会管理它,因为我有一个标志通知我要显示哪一个(微调器或编辑文本)。

我有一个活动按钮,单击该按钮后我需要从所有片段中获取值,但我如何仅从第一个片段中获取值。

我在这里放了一个错误的样本,因为我知道它是错误的,但我保留以供参考。

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

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());
    }

请建议我如何从所有片段中获取所有值。

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

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

    例如,您创建一个Interface

    public interface IGetValue{
    String getEditTextValue();
    }
    

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

    @Override
    public String getEditTextValue() {
    
        return YOUR_EDIT_TEXT.getText().toString();
    }
    

    现在,如果您想在活动中从Fragment1 获取EditText 值,只需使用这行代码:

    String valueFromFragment1= fragment1Instance.getEditTextValue();
    

    欲了解更多信息,请查看thisthis 答案。

    谢谢:)

    【讨论】:

      【解决方案2】:

      使用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);
      

      【讨论】:

      • 因为我有一个片段,即 FragmentTwo 我只创建它的实例。现在假设实例 1 确实有微调器,我选择了一个值,然后我切换到另一个实例,该实例具有编辑文本,我在其中键入了 Hello。现在按下提交按钮(在 Activity 中定义)应该会显示 spinner 和 edittext 的值。
      • 从活动中检索捆绑价值
      【解决方案3】:

      在您向适配器添加片段的代码中,将该片段存储在 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 循环并获取您想要的数据

      【讨论】:

        【解决方案4】:

        谢谢大家:) 在这里,我分享在 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() 中实现的接口中的方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多