【问题标题】:how to call the start activity from one java class如何从一个 java 类调用启动活动
【发布时间】:2014-02-19 17:50:28
【问题描述】:

是否可以在extends Activity 的通用java 类中使用Intent 来启动Activty?

 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.Spinner;
 import android.app.Activity;
 import android.content.Intent;

 public class SubActivity extends Activity{

          protected void onCreate(Bundle savedInstanceState) {
                 super.onCreate(savedInstanceState);
                 setContentView(R.layout.activity_main);
           }           
 }

还有一个像下面这样的通用java类

class TestClass extends Activity{

       void firstsem(){
        Intent t = new Intent(this, SubActivity.class);
        t.putExtra("sub1","chemistry");                 
        startActivity(t);
   }
}

是否可以从通用 java 类启动 Activity?谁能告诉我如何实现这一目标?

【问题讨论】:

  • 您需要创建一个函数来执行此操作。你应该试试java教程。
  • 只要Subject 也是Activity 的子类,这段代码似乎并没有什么问题。你实际测试过吗?

标签: java android android-intent


【解决方案1】:

要启动Activity,您需要Context。

方法startActivity(Intent intent)继承自Context类。 As it can be seen in the Documentation

同样,显式的Intent 本身也需要在其构造函数中使用Context。

Intent(Context packageContext, Class<?> cls)

作为Activity extends Context 并且您已经扩展了Activity,您可以使用自己的类作为上下文。 因此只需调用

void method() {
    startActivity(new Intent(this, ActivityName.class));
} 

如果您不想扩展 Activity,可以将 Context 作为参数传递。

public static void startActivity(Context context) {
    context.startActivity(new Intent(context, ActivityName.class));
} 

基本实现

public class ActivityA extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate();
    }

    public void onClick(View view) {
        ActivityStarter.startActivityB(this);
    }
}

public class ActivityB extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate();
    }
}

public class ActivityStarter {

    public static void startActivityB(Context context) {
        Intent intent = new Intent(context, ActivityB.class);
        intent.putExtra("sub1","chemistry"); 
        context.startActivity(intent);
    }
}

【讨论】:

  • 我是 android 新手,你能给我举个例子来创建上下文并将其传递给另一个活动
  • 当然,我会在一两个小时后回到我的电脑前编辑我的答案。我希望没关系。给你。
  • 如果我们将 ActivityB.class 调用作为一般调用会怎样?假设它存储在一个变量中。有可能吗?
【解决方案2】:

是的,这是可能的。并且扩展活动也没有必要。让我们将我们的自定义类命名为Custom.java 假设我们需要在 Custom 类中调用 method() 时启动 NewActivity 类。

第 1 步:

正如EndZeit 指出的那样,您需要在 Custom.java 类中的 MainActivity 类的上下文才能从该点开始新的活动。

Custom custom = new Custom(MainActivity.this);

第 2 步:

在自定义类中,创建一个构造函数并接收传递的上下文:

Private Context context;
public Custom (Context context) {
    this.context = context;
}

第 3 步:

现在,开始新的活动:

public void method() {
    Intent intent = new Intent(context, NewActivity.class);
    context.startActivity(intent);
}

你已经完成了:)

【讨论】:

    【解决方案3】:

    只需使用任何 Java 类中的以下代码:

    Intent i = new Intent(getContext(),TargetActivity.class);
    getContext().startActivity(i);
    

    【讨论】:

      【解决方案4】:

      改变这一行:

      Intent t= new Intent(testclass.this,Subject.class);
      

      到:

      Intent t= new Intent(testclass.this,subactivity.class);
      

      另外,在 Manifest 文件中添加对子活动的引用

      类似:

      <activity android:name="com.example.app.subactivity" />
      

      【讨论】:

      • 我更改了类似的内容,但仍然出现错误。在我的应用程序中,我有两个活动 main_win.xml、subject_win.xml 文件和相应的名为 mainactivity.class 和 subject.class 的 java 文件。我的应用程序中还有第三类 Cse.class 文件。现在按下 main_win.xml 中的按钮后,mainactivity.class 接收它并调用 Cse.class 文件中的 matchSem() 方法。现在从 matchSem() 方法开始,我必须启动 subject.xml 活动。我可以这样做吗
      • 但您似乎有一个名为 subactivity.java 的类:请参阅此 public class SubActivity extends Activity{ 这不是一个好习惯 拥有一个不同于 lass 名称的 Java 文件名!!
      【解决方案5】:

      在 Kotlin 中你可以这样做

      我假设您有 context 可用

      val intent = Intent(context, YourActivity::class.java)
      context.startActivity(intent)
      (context as Activity).finish()
      

      【讨论】:

        【解决方案6】:

        在一行代码中启动新的 Activity。

        startActivity(new Intent(this, ActivityName.class));
        

        【讨论】:

          【解决方案7】:

          当一个类扩展 Activity 然后转向 Activity 类。所以,你的两个类,subactivity 和 testclass,活动类。

          是的,你可以从另一个班级开始活动。

          按照下面的教程链接...您将了解如何从另一个活动开始一个活动

          Android activity – from one screen to another screen

          【讨论】:

            猜你喜欢
            • 2012-04-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-12-17
            • 2023-03-07
            • 2011-10-12
            相关资源
            最近更新 更多