【问题标题】:startActivity from a custom class来自自定义类的 startActivity
【发布时间】:2015-01-30 09:20:02
【问题描述】:

我有一个菜单和 5 个活动。为了避免重复菜单代码,我创建了一个公共类并在每个活动中调用它:

 Testclass testclass = new Testclass(Main.this);

...但不幸的是我不能在课堂上使用startActivity()。这是我的课程代码:

 public class Testclass extends Activity {

     public Testclass(Activity cc) {
         Intent intent = new Intent(cc,Next.class);
            startActivity(intent);
     }
 }

【问题讨论】:

  • 发布您的Activity 课程。可能是您将startActivity() 定义为私有或其他。
  • 从它的上下文开始你的活动。对于前context.startActivity(intent);

标签: java android start-activity


【解决方案1】:

试试这个,告诉我它是否对你有帮助。

public class Testclass extends Activity {

     public Testclass(Activity cc) {
         final Context context = Testclass.this.getContext();
                Intent intent = new Intent(context , Next.class);
                context.startActivity(intent);
     }
 }    

【讨论】:

  • 我应该写什么而不是“YourClass”?
  • 我写的所有东西都有错误
  • YourClass 表示您所在的班级。请参阅我已编辑的帖子。
【解决方案2】:

您误解了 Activity 及其生命周期的概念。您不要实例化 Activity,Activity 具有回调机制(onCreate、onResume 等),可以准确地告诉您要做什么。您永远不必致电new Activity()。 你正在做的事实 Testclass testclass = new Testclass(Main.this);说明你对这个概念有误解:http://developer.android.com/training/basics/activity-lifecycle/index.html

要解决您的错误,请阅读文档,然后您的方法有什么问题就会清楚。

提示:您的 Testclass 已经是一个 Activity,因为您继承自 Activity

下次请提供您的问题的完整错误日志,以便全面了解您的代码可能出现的问题。

【讨论】:

    【解决方案3】:

    我认为您没有使用正确的上下文来启动 Intent。

    不如试试

    {
    
    public Testclass() {
             Intent intent = new Intent(this,Next.class);
                startActivity(intent);
         }
    }
    

    如果this 也不起作用,请尝试使用getApplicationContext()

    【讨论】:

      【解决方案4】:

      为什么不使用这段代码?

      startActivity(new Intent(Main.this, Next.class));
      // "Main" is your current Activity
      // "Next" is your next Activity to be opened.
      

      我认为,无需创建新的公共类即可使用它非常简单。请将您的代码与我上面的代码进行比较,只有一行。

      【讨论】:

      • 谢谢。我创建了一个新课程,因为我不想在其他 4 个活动中重复代码
      【解决方案5】:

      #可以使用弱引用对象来存储Activity类的Context#

      ##in activity class## 
      
      public class Activity extends AppCompatActivity implements View.OnClickListener {
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_view);
      
      
              findViewById(R.id.toNext).setOnClickListener(this);
          }
      
          @Override
          public void onClick(View v) {
      
      
              Testclass thread = new Testclass(Activity.this,v);
              new Thread(thread).start();
      
              }
          }
      
      }
      
      // in sub class
      public class Testclass extends Activity implements Runnable {
          View landingPage;
      
          private Activity activity;
      
          public Testclass (Activity activity, View landingPage){
              WeakReference<Activity> ActivityWeakReference = new WeakReference<>(Activity);
      
              this.landingPage = landingPage;
              this.activity = activityWeakReference.get();
          }
      
          @Override
          public void run() {
      
              Intent activityIntent = new Intent(activity, Next.class);
              activityIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      
              runOnUiThread(new Runnable() {
                  @Override
                  public void run() {
      
                      switch (landingPage.getId())
                      {
                          case R.id.Next.class:
                              activity.finish();
                              activity.startActivity(activityIntent);
                              break;
      
                      }
      
                  }
              });
      
      
          }
      }
      

      【讨论】:

      • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多