我需要从自定义组件中打开一个对话框。要做到这一点,我需要片段管理器,但我不能调用getFragmentManager(): "方法getFragmentManager()未定义类型Context"
public class MyCustomButton extends Button {
View.OnClickListener myOnlyhandler = new View.OnClickListener() {
public void onClick(View v) {
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getFragmentManager(), "Tag");
}
};
}
有更好的方法吗?
按钮放在布局文件中:
<com.example.MyCustomButton android:id="@+id/myId1"/>
<com.example.MyCustomButton android:id="@+id/myId2"/>
<com.example.MyCustomButton android:id="@+id/myId3"/>
我需要一个听众。
答案 0 :(得分:1)
最好以编程方式创建按钮,并将上下文传递给声明的类,如下所示。 将你的班级改为:
public class MyCustomButton extends Button {
private Context context;
View.OnClickListener myOnlyhandler = new View.OnClickListener() {
public void onClick(View v) {
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getFragmentManager(), "Tag");
}
};
public void MyCustomButton(Context context){
this.context=context;
}
}
然后声明你的按钮:
MyCustomButton button = new MyCustomButton(MainActivity.this);
然后您必须将此视图添加到主LinearLayout
。
答案 1 :(得分:0)
您应该将一个上下文传递给构造函数,然后使用Activity或FragmentActivity进行转换,以便能够获取FragmentManager或SupportFragmentManger:
public class MyCustomButton extends Button implements View.OnClickListener {
private FragmentManager fragmentManager;
public void MyCustomButton(Context context){
fragmentManager = ((FragmentActivity) context).getFragmentManager();
setOnClickListener(this);
}
@Override
public void onClick(View v) {
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(fragmentManager, "Tag");
}
}