0

我需要从我的自定义组件中打开一个对话框。为此,我需要片段管理器,但我不能调用 getFragmentManager():“方法 getFragmentManager() 未为类型上下文定义”

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"/>

我需要一个听众来听他们所有人。

4

2 回答 2

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);

那么您必须将此视图添加到 main LinearLayout

于 2013-11-14T20:14:32.270 回答
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");
    }
}
于 2015-01-06T04:37:55.560 回答