![](/img/trans.png)
[英]How to start activity from non-activity class,if first activity is simple java class?
[英]How to start an activity from a plain non-activity java class?
我想在我的應用程序中使用數據綁定實現MVVM模式。 這是我的布局文件中的登錄按鈕:
<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模式)
如果它應該在mainActivity中,我會用android:onClick="startNewActivity"
替換最后一行,然后在我的MainActivity中定義方法。
但是,如果將它放在ViewModel類中,則聲明以下方法:
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呢?
如果要從MainActivity啟動LoginActivity,則必須在按鈕單擊事件的意圖中傳遞此類。 像這樣,
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}"/>
改變如下。
Intent login = new Intent(MainActivity.this, LoginActivity.class);
startActivity(login);
那么你不能從自定義類啟動Activity,例如:Employee。 您所能做的就是更改應用程序的體系結構,以便您可以在MainActivity
單擊某個按鈕啟動活動。
然后開始
startActivity(new Intent(MainActivity.this, LoginActivity.class));
其中MainActivity.this
是上下文, LoginActivity.class
是要啟動的Activity。
Intent
第一個參數是context,而不是class。 用MainActivity.this
替換你的第一個參數
new Intent(MainActivity.this, LoginActivity.class);
首先創建新活動(MainActivity)。檢查以下代碼。
public class MainActivity extends AppCompatActivity {
Button btnLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnLogin = (Button) findViewById(R.id.loginBtn);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this, LoginActivity.class);
startActivity(i);
}
});
}
}
創建另一個活動(LoginActivity)。 LoginActivity.java
public class LoginActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
}
}
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<Button
android:layout_width="100dp"
android:layout_height="100dp"
android:text="LoginBtn"
android:id="@+id/loginBtn"
/>
</RelativeLayout>
AndroidManifest.xml中
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gami.activity"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="LoginActivity"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.