如何将无线电组值从片段传递到 activity?
how to pass a radiogroup value from a fragment to an activity?
如何从片段中的无线电组中获取值,
我有 1 个片段来显示问题,我想获得值
用户 activity 回答,因为下一步和后退按钮在 activity,
我来自 sqlite 数据库的问题
我的activity片段
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.view_pager);
setupViewPager(viewPager);
back = findViewById(R.id.btnBack);
next = findViewById(R.id.btnNext);
back.setOnClickListener(this);
next.setOnClickListener(this);
}
显示来自框架的问题 activity 使用 ViewPager
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(0));, "1");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(1));, "2");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(2);, "3");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(3));, "4");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(4));, "5");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(5);, "6");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(6));, "7");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(7));, "8");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(8));, "9");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(9));, "10");
viewPager.setOffscreenPageLimit(adapter.getCount());
viewPager.setAdapter(adapter);
}
下一步和返回按钮
@Override
public void onClick(View view) {
if(view == back){
mfragmentIndex--;
viewPager.setCurrentItem(mfragmentIndex);
}else if(view == next) {
mfragmentIndex++;
viewPager.setCurrentItem(mfragmentIndex);
}
}
class 查看寻呼机
class ViewPagerAdapter extends FragmentPagerAdapter{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitle = new ArrayList<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment,String title){
mFragmentList.add(fragment);
mFragmentTitle.add(title);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return super.getPageTitle(position);
}
}
我的片段显示问题
public static QuestionFragment newInstance(String questionId1) {
final QuestionFragment fragment = new QuestionFragment();
final Bundle args = new Bundle();
args.putString(ARG_QUESTION_ID,questionId1);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final String question1 = getArguments().getString(ARG_QUESTION_ID);
final DBAdapter dbAdapter = new DBAdapter(getContext());
questionsList = dbAdapter.getAllQuestions();
currentQuestion = questionsList.get(Integer.parseInt(question1));
View view = inflater.inflate(R.layout.fragment_question, container, false);
final RadioGroup grp=view.findViewById(R.id.radioGroup1);
txtQuestion=view.findViewById(R.id.tvQuestion);
rbtnA=view.findViewById(R.id.radio0);
rbtnB=view.findViewById(R.id.radio1);
rbtnC=view.findViewById(R.id.radio2);
rbtnD=view.findViewById(R.id.radio3);
setPertanyaan();
return view;
}
private void setPertanyaan()
{
txtQuestion.setText(currentQuestion.getQUESTION());
rbtnA.setText(currentQuestion.getOptionA());
rbtnB.setText(currentQuestion.getOptionB());
rbtnC.setText(currentQuestion.getOptionC());
rbtnD.setText(currentQuestion.getOptionD());
}
可以通过在片段 class 中创建接口然后在 activity 中实现它来完成。
在片段中创建一个接口,如:-
// Container Activity must implement this interface
public interface OnRadioGroupSelectedListener {
public void onButtonSelected(String value);
}
在片段class中全局声明listner对象:-
OnRadioGroupSelectedListener mCallback;
Fragment 在其 onAttach() 生命周期方法中捕获接口实现,然后可以调用接口方法以便与 Activity.
通信
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnRadioGroupSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnRadioGroupSelectedListener");
}
}
现在接收回调添加:-
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
// if(checkedId==R.id.radio0) {
// mCallback.onButtonSelected(0)
// }else if (checkedId==R.id.radio1) {
// mCallback.onButtonSelected(1);
// }else if (checkedId==R.id.radio2) {
// mCallback.onButtonSelected(2);
// }else if (checkedId==R.id.radio3) {
// mCallback.onButtonSelected(3);
// }
RadioButton radioButton = group.findViewById(checkedId);
mCallback.onButtonSelected(radioButton.getText());
});
回调将选中的单选按钮的位置传递给 activity。
现在 activity 实现列表器,
implements QuestionFragment.OnRadioGroupSelectedListener
并覆盖方法以获取 activity 中选定的按钮位置。
注意:- 您还可以根据需要更改 onButtonSelected(String selectedRadioButtonValue)
参数。
如何从片段中的无线电组中获取值, 我有 1 个片段来显示问题,我想获得值 用户 activity 回答,因为下一步和后退按钮在 activity, 我来自 sqlite 数据库的问题
我的activity片段
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = findViewById(R.id.view_pager);
setupViewPager(viewPager);
back = findViewById(R.id.btnBack);
next = findViewById(R.id.btnNext);
back.setOnClickListener(this);
next.setOnClickListener(this);
}
显示来自框架的问题 activity 使用 ViewPager
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(0));, "1");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(1));, "2");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(2);, "3");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(3));, "4");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(4));, "5");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(5);, "6");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(6));, "7");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(7));, "8");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(8));, "9");
adapter.addFrag(QuestionFragment.newInstance(String.valueOf(9));, "10");
viewPager.setOffscreenPageLimit(adapter.getCount());
viewPager.setAdapter(adapter);
}
下一步和返回按钮
@Override
public void onClick(View view) {
if(view == back){
mfragmentIndex--;
viewPager.setCurrentItem(mfragmentIndex);
}else if(view == next) {
mfragmentIndex++;
viewPager.setCurrentItem(mfragmentIndex);
}
}
class 查看寻呼机
class ViewPagerAdapter extends FragmentPagerAdapter{
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitle = new ArrayList<>();
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFrag(Fragment fragment,String title){
mFragmentList.add(fragment);
mFragmentTitle.add(title);
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return super.getPageTitle(position);
}
}
我的片段显示问题
public static QuestionFragment newInstance(String questionId1) {
final QuestionFragment fragment = new QuestionFragment();
final Bundle args = new Bundle();
args.putString(ARG_QUESTION_ID,questionId1);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final String question1 = getArguments().getString(ARG_QUESTION_ID);
final DBAdapter dbAdapter = new DBAdapter(getContext());
questionsList = dbAdapter.getAllQuestions();
currentQuestion = questionsList.get(Integer.parseInt(question1));
View view = inflater.inflate(R.layout.fragment_question, container, false);
final RadioGroup grp=view.findViewById(R.id.radioGroup1);
txtQuestion=view.findViewById(R.id.tvQuestion);
rbtnA=view.findViewById(R.id.radio0);
rbtnB=view.findViewById(R.id.radio1);
rbtnC=view.findViewById(R.id.radio2);
rbtnD=view.findViewById(R.id.radio3);
setPertanyaan();
return view;
}
private void setPertanyaan()
{
txtQuestion.setText(currentQuestion.getQUESTION());
rbtnA.setText(currentQuestion.getOptionA());
rbtnB.setText(currentQuestion.getOptionB());
rbtnC.setText(currentQuestion.getOptionC());
rbtnD.setText(currentQuestion.getOptionD());
}
可以通过在片段 class 中创建接口然后在 activity 中实现它来完成。
在片段中创建一个接口,如:-
// Container Activity must implement this interface
public interface OnRadioGroupSelectedListener {
public void onButtonSelected(String value);
}
在片段class中全局声明listner对象:-
OnRadioGroupSelectedListener mCallback;
Fragment 在其 onAttach() 生命周期方法中捕获接口实现,然后可以调用接口方法以便与 Activity.
通信@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (OnRadioGroupSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnRadioGroupSelectedListener");
}
}
现在接收回调添加:-
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
{
public void onCheckedChanged(RadioGroup group, int checkedId) {
// checkedId is the RadioButton selected
// if(checkedId==R.id.radio0) {
// mCallback.onButtonSelected(0)
// }else if (checkedId==R.id.radio1) {
// mCallback.onButtonSelected(1);
// }else if (checkedId==R.id.radio2) {
// mCallback.onButtonSelected(2);
// }else if (checkedId==R.id.radio3) {
// mCallback.onButtonSelected(3);
// }
RadioButton radioButton = group.findViewById(checkedId);
mCallback.onButtonSelected(radioButton.getText());
});
回调将选中的单选按钮的位置传递给 activity。
现在 activity 实现列表器,
implements QuestionFragment.OnRadioGroupSelectedListener
并覆盖方法以获取 activity 中选定的按钮位置。
注意:- 您还可以根据需要更改 onButtonSelected(String selectedRadioButtonValue)
参数。