Android如何传递Activity.class作为函数的参数

时间:2013-03-05 16:40:05

标签: java android

我最近从python迁移到了Android,并且被困在这里。

这是我的类声明,用于为接受必要参数的警报对话框创建公共函数

public static AlertDialog.Builder getAlertDialog(String strArray[],
        String strTitle, Activity v) {

    return new AlertDialog.Builder(v)
    .setTitle(strTitle).setItems(strArray,
            new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            // TODO Auto-generated method stub
        }
    });
}

但我无法通过这段代码调用此函数,这会给我一个错误

  getAlertDialog(strArray, strTitle, MakeCall.class).show();

错误是

the method getAlertDialog(String[], String, Activity) in the type   MakeCallAlertDialog is not applicable for the arguments (String[], String, Class<TestActivity>)

任何人都可以告诉我如何正确地获得这个吗?提前谢谢。

7 个答案:

答案 0 :(得分:19)

这样打电话:

ButtonClickBySani(R.id.btnsehrabandi, sehrabandiActivity.class);

定义:

private void ButtonClickBySani(int ButtonId, final Class<? extends Activity> ActivityToOpen)
{
    Button btn;
    // Locate the button in activity_main.xml
    btn = (Button) findViewById(ButtonId);

    // Capture button clicks
    btn.setOnClickListener(new OnClickListener() {
        public void onClick(View arg0) {
            startActivity(new Intent(getBaseContext(), ActivityToOpen));
            // Start NewActivity.class
            //Intent myIntent = new Intent(getBaseContext(), ActivityToOpen);
           // startActivity(myIntent);
        }
    });
}

答案 1 :(得分:7)

如果您只想传递对活动使用的引用:MakeCall.this(或者只是this。)

答案 2 :(得分:3)

我想你要通过this。如果不起作用,请使用MakeCall.this

 getAlertDialog(strArray, strTitle, this).show();

答案 3 :(得分:2)

你需要这个实例。使用thisSampleActivity.this

答案 4 :(得分:2)

只需创建一个活动对象/实例,例如 new YourActivity()

public static void Redirect(Context context,Activity page) {

..... //code

context.startActivity(new Intent(context,page.getClass()));

((Activity) context).finish();
}

并将此方法用作

Redirect(Registration.this, new YourActivity());

答案 5 :(得分:0)

在Java中,您编写的每个类也都附加了Class类。类加载器等将使用Class类。

正如其他人所说,你应该使用MakeCall.this代替MakeCall.class,因为MakeCall.this会指向自己哪个是活动,而MakeCall.class会指向MakeCall的附加{{1} }。class。

答案 6 :(得分:-1)

这对我有用:

private void switchActivity(Class cls){
    Intent intent = new Intent(HomeActivity.this, cls);
    startActivity(intent);
}

调用此函数:switchActivity(DestinationActivity.class)