如何在Java中使用类的工作范围?

时间:2012-07-01 21:23:46

标签: java android

我不确定如何说出这个问题,所以我在这方面做得最好。所以我在我的Activity中创建DatePicker时遇到问题。这是给我一个错误的代码:

EditEventActivity.java

DateDialogFragment frag = DateDialogFragment.newInstance(this, new 
DateDialogFragmentListener() {

            @Override
            public void updateChangeDate(int year, int month, int day) {
                // TODO Auto-generated method stub

            }
        }, sYear, sMonth, sDay);

我在那里的newInstance()方法是什么给了我错误。错误是这样的:

The method newInstance(Context, AddEventActivity.DateDialogFragmentListener, int, int,
int) in the type DateDialogFragment is not applicable for the arguments 
(EditEventActivity, new EditEventActivity.DateDialogFragmentListener(){}, int, int, 
int)

现在DateDialogFragment位于自己的文件中。我不认为我需要发布。就是这样。但我的界面在AddEventActivity.java。现在这是我很困惑的事情。来自DateDialogFragment的静态方法newInstance()需要DateDialogFragmentListener而非AddEventActivity.DateDialogFragmentListener。所以我认为这就是问题所在。但话说回来,我不确定,这是我需要帮助理解的。提前谢谢你。

实际上。我还想知道我可能还包括newInstance()方法:

DateDialogFragment.java

public static DateDialogFragment newInstance(Context context, DateDialogFragmentListener 
listener, int year, int month, int day) {
    DateDialogFragment dialog = new DateDialogFragment();
    mContext = context;
    mListener = listener;
    mYear = year;
    mMonth = month;
    mDay = day;
    Bundle args = new Bundle();
    args.putString("title", "Set Date");
    dialog.setArguments(args);
    return dialog;
}

2 个答案:

答案 0 :(得分:3)

您向newInstance(...)方法传递了太多参数。只传递sYearsMonthsDay一次而不是两次。

修改 你在这里有两个具有相同简单名称的类,但它们是不同的类,因此是不同的类型。只需传递正确类的实例。

DateDialogFragment frag = DateDialogFragment.newInstance(
    this, 
    new AddEventActivity.DateDialogFragmentListener() {

        @Override
        public void updateChangeDate(int year, int month, int day) {
            // TODO Auto-generated method stub

        }
    }, sYear, sMonth, sDay);

..如果您需要传递newInstance(),请更正EditEventActivity.DateDialogFragmentListener方法的签名。

答案 1 :(得分:1)

假设EditEventActivity.DateDialogFragmentListener扩展AddEventActivity.DateDialogFragmentListener,您的newInstance方法在听众之后需要3 int秒,并且您传递了6 int s - 您可能意味着:

DateDialogFragment frag = DateDialogFragment.newInstance(this, new DateDialogFragmentListener() {

        @Override
        public void updateChangeDate(int year, int month, int day) {
            // TODO Auto-generated method stub

        }
    }, sYear, sMonth, sDay); //removed the last 3 arguments

修改
在您进行修改后,请回到我的第一条评论:EditEventActivity.DateDialogFragmentListener是否会延长AddEventActivity.DateDialogFragmentListener