Android:如何在活动类中访问非活动Xml onClick属性方法

时间:2014-07-07 18:33:57

标签: java android customdialog

我有CustomDialog,其中我使用了TextViewsonClickonClick属性,现在我想在Activity class中访问这些CustomDialog方法。由于此Activity从我想要访问onClick方法的onClick类中膨胀,所以当我为public void playerEdit(View view) { Toast.makeText(this,"hello",Toast.LENGTH_LONG).show(); } 创建方法时

Exception

显然它会抛出 Could not find a method playeEdit(View) in the activity class android.view.ContextThemeWrapper for onClick handler on view class android.widget.TextView with id 'p1'

Activity Class

这意味着我试图在不可访问的类中获取它,

我的问题是如何在Exception

中访问它

如何处理此{{1}}? 许多人提前感谢...

2 个答案:

答案 0 :(得分:0)

您的xml文件中可能有拼写错误。方法名称为" playeEdit"而不是" playerEdit"

答案 1 :(得分:0)

我相信在构建AlertDialog时,你会以类似的方式进行:

ContextThemeWrapper themedContext = new ContextThemeWrapper(getActivity(),android.R.style.Theme_Dialog);
AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);

(发布整个代码有帮助)

您将获得异常,因为xml中的onClick处理程序在其中查看的活动(以及xml被充气的位置)是在此主题活动中,而不是原始活动!

您需要扩展ContextThemeWrapper类,将其传递给构建器,并实现点击处理程序,如下所示:

public static class MyContextThemeWrapper extends ContextThemeWrapper
{

    public MyContextThemeWrapper() {
        super();
    }

    public MyContextThemeWrapper(Context base, int themeres) {
        super(base, themeres);
    }

    public void playerEdit(View view)
    {
        // Do stuff when clicked
    }

}

如上所述,您将把您的课程传递给您的建设者:

MyContextThemeWrapper themedContext = new MyContextThemeWrapper(getActivity(), android.R.style.Theme_Dialog);
AlertDialog.Builder builder = new AlertDialog.Builder(themedContext);

这确实有用......我测试了它!