如何处理来自活动的动态多个片段的内容

时间:2019-06-06 20:52:52

标签: android android-fragments

我正在创建一个简单的考试问题应用程序。这就是为什么我根据问题动态创建多个片段的原因。 该片段包含一个问题的TextView和四个选项的RadioButtons。活动中有一个按钮可以清除选择(如果选择了答案)。 我为此创建了 interface 并将其实现为一个片段,并尝试取消选中所有单选按钮,但是该方法正在调用,但是大多数情况下单选按钮仍处于选中状态,而很少被取消选中。我没有得到什么帮助,请帮忙。

当我重新检查所有内容时,当我连续选择8个问题的8个选项并从第一个片段中取消选中每个选项时,我发现了一件事。当我位于片段的第0个位置并单击按钮时,它会取消选中该复选框;但是当我滚动到下一个片段(第1个)并单击按钮时,它会分别取消选中第二个位置的片段。第二个未选中第3个,第三个未选中第四个,4th取消选中5th,5th什么都没有发生,6th取消选中7th。请告诉我如何解决这个问题。

代码如下,

    FragmentManager fm = getSupportFragmentManager();
    viewPager.setAdapter(new FragmentStatePagerAdapter(fm) {
        public int getCount() {
            return titles.size();
        }

        public Fragment getItem(int position) {
            QuestionsFragment fragment = new QuestionsFragment();
            fragment.setText(titles.get(position), position); //

            return fragment;
        }

        public int getItemPosition(Object item) {
            QuestionsFragment fragment = (QuestionsFragment)item;
            String title = fragment.getText();
            int position = titles.indexOf(title);
            if (position >= 0) {
                return position;
            } else {
                return POSITION_NONE;
            }
        }
    });

接口:

public interface ClearSelection {
public void reamoveAllSelections();}

片段:

public final class QuestionsFragment extends Fragment {

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

    textView = view.findViewById(R.id.tv_question);
    rbOptionOne = view.findViewById(R.id.rb_option_one);
    rbOptionTwo = view.findViewById(R.id.rb_option_two);
    rbOptionThree = view.findViewById(R.id.rb_option_three);
    rbOptionFour = view.findViewById(R.id.rb_option_four);

((QuestionsActivity)getActivity()).clearSelectionApi(new ClearSelection() {
        @Override
        public void reamoveAllSelections() {
            if (rbOptionOne.isChecked()) {
                rbOptionOne.setChecked(false);
            }
            if (rbOptionTwo.isChecked()) {
                rbOptionTwo.setChecked(false);
            }
            if (rbOptionThree.isChecked()) {
                rbOptionThree.setChecked(false);
            }
            if (rbOptionFour.isChecked()) {
                rbOptionFour.setChecked(false);
            }
        }
    });

return view;
}}

或者如果有其他选择可以建议您做同样的事情,请提出建议。预先感谢。

1 个答案:

答案 0 :(得分:0)

尝试在OnAttach()片段方法中使用此代码。