如何从Dialog片段上的单选按钮正确获取值到Fragment?

时间:2015-03-16 02:35:24

标签: android android-fragments

我想在单击对话框片段上的按钮时获取单选按钮的文本值我使用此代码

btnOK.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RadioButton rb = (RadioButton)view.findViewById(selectedId);
            LevelDialogListener activity = (LevelDialogListener)getActivity();
            activity.onFinishSelectDialog(rb.getText().toString());
            Toast.makeText(getActivity().getApplicationContext(),rb.getText()+
                   "Level Selected",Toast.LENGTH_SHORT).show();
            dismiss();
        }
    });

但我在行

上得到了ClassCastException
LevelDialogListener activity = (LevelDialogListener)getActivity();

我是按照正确的方式做的吗?

[编辑] 这是我的dialogFrgment代码:

public class LevelSelectDialog extends DialogFragment implements RadioGroup.OnCheckedChangeListener{

public interface LevelDialogListener{
    void onFinishSelectDialog(String inputText);
}

private Button btnOK;
private String sb;
private int selectedId;

public LevelSelectDialog(){
    //Empty constructor required for Dialog fragment
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    final View view = inflater.inflate(R.layout.dialog_levelselect,container);
    btnOK = (Button)view.findViewById(R.id.btnDOk);
    final RadioGroup rgLevel = (RadioGroup)view.findViewById(R.id.rgLevel);
    getDialog().setTitle("SelectLevelDialog");

    btnOK.setOnClickListener( new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RadioButton rb = (RadioButton)view.findViewById(selectedId);
            LevelDialogListener activity = (LevelDialogListener)getActivity();
            activity.onFinishSelectDialog(rb.getText().toString());
            Toast.makeText(getActivity().getApplicationContext(),rb.getText()+
                   "Level Selected",Toast.LENGTH_SHORT).show();
            dismiss();
        }
    });
    return view;
}

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
   selectedId = checkedId;
}

}

这是我的片段代码:

package com.ibrahim.dicel;
public class Menu4RegisterFragment extends Fragment implements  LevelSelectDialog.LevelDialogListener{
Button btnLevel;

int lvlValue;
View rootView;

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_register,container,false);

    // Level Button Click event
    btnLevel.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
                    showEditDialog();
                }
    });


    return rootView;
}

private void showEditDialog(){
    FragmentManager fm = getFragmentManager();
    LevelSelectDialog levelSelectDialog = new LevelSelectDialog();
    levelSelectDialog.show(fm, "dialog_levelselect");
}

@Override
public void onFinishSelectDialog(String inputText) {
    switch(inputText){
        case "Administrator":
            lvlValue = 1;
            btnLevel.setText("Administrator");
            break;
        case "Penyetuju":
            lvlValue = 2;
            btnLevel.setText("Penyetuju");
            break;
        case "Teknisi":
            lvlValue = 3;
            btnLevel.setText("Teknisi");
            break;
        default:
            break;
    }
    Toast.makeText(getActivity().getApplicationContext(),inputText,Toast.LENGTH_LONG).show();
}

}

我将此片段用作导航菜单

中选定菜单之一

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

  1. 检查您的活动中是否已正确实施接口。

  2. 如果是这样,请同时粘贴您的活动和片段代码。