簡體   English   中英

如何從普通的非活動java類啟動活動?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM