从自定义组件获取片段管理器

时间:2013-11-14 20:03:26

标签: android listener custom-component

我需要从自定义组件中打开一个对话框。要做到这一点,我需要片段管理器,但我不能调用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"/>

我需要一个听众。

2 个答案:

答案 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");
    }
}