如何从普通的非活动Java类开始活动? [英] How to start an activity from a plain non-activity java class?

查看:90
本文介绍了如何从普通的非活动Java类开始活动?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在我的应用程序中使用数据绑定来实现MVVM模式。这是我的布局文件中的登录按钮:

I want to implement MVVM pattern using data-binding in my app. Here's the login button from my layout file:

<Button
     android:id="@+id/login"
     android:layout_width="0dp"
     android:layout_height="50dp"
     android:text="@{mainViewModel.name}"
     android:textColor="@color/white"
     android:onClick="@{mainViewModel.startNewActivity}"/>

逻辑是,单击此登录按钮后,应开始一个新活动。我是android的初学者,我的问题是应该将startActivity部分保留在MainActivity还是ViewModel类中? (如果我希望它符合MVVM模式)

The logic is, on clicking this login button, a new activity should be started. I'm a beginner in android, and my question is should I keep the startActivity part in my MainActivity or in my ViewModel class? (If I want it to be in accordance with the MVVM pattern)

如果它应该在mainActivity中,我将最后一行替换为
android:onClick = startNewActivity ,然后在我的MainActivity中定义该方法。

If it should be in the mainActivity, I would replace the last line with android:onClick="startNewActivity" and then define the method in my MainActivity.

但是,如果要放置它在ViewModel类中,声明以下方法:

But, if it is to be placed in the ViewModel class, declaring the following method:

public void startNewActivity(View view) {
    Intent login = new Intent(MainActivity.class, LoginActivity.class);
    startActivity(login);
}

给出错误:

Cannot resolve constructor 'Intent(java.lang.Class<package.name.MainActivity>,java.lang.Class<package.name.LoginActivity>)'

然后如何从ViewModel类启动LoginActivity?

How do I start the LoginActivity from my ViewModel class then?

推荐答案

如果要从MainActivity启动LoginActivity,则
必须在意图按钮单击事件时传递此类。
这样,

If you want to start LoginActivity from MainActivity then you have to pass this class in intent on button click event. like this,

MainViewModel

public class MainViewModel extends BaseObservable 
{ 
    public String name; 
    Context con; 
    public MainViewModel(Context context)
    { 
        this.con = context; 
    }  
public void click(View view) 
 { 
   Intent login = new Intent(con, LoginActivity.class); 
   con.startActivity(login); 
  } 
} 

MainActivity.java

public class MainActivity extends AppCompatActivity {

        @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ActivityMainBinding binding = DataBindingUtil.setContentView(this,  R.layout.activity_main);
  MainViewModel mainViewModel = new MainViewModel(MainActivity.this);
  binding.setMainViewModel(mainViewModel);
 }
}

LoginActivity.java

  public class LoginActivity extends Activity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.login);
}
 }

activity_main.xml

     <Button
    android:id="@+id/login"
    android:layout_width="0dp"
    android:layout_hiehgt="20dp"
    android:onClick="@{mainViewModel.click}"/>

这篇关于如何从普通的非活动Java类开始活动?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆