Skip to content Skip to sidebar Skip to footer

How To Start An Activity From A Plain Non-activity Java Class?

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

MainActivity.java

publicclassMainActivityextendsAppCompatActivity {

        @OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ActivityMainBindingbinding= DataBindingUtil.setContentView(this,  R.layout.activity_main);
  MainViewModelmainViewModel=newMainViewModel(MainActivity.this);
  binding.setMainViewModel(mainViewModel);
 }
}

LoginActivity.java

publicclassLoginActivityextendsActivity {
   @OverrideprotectedvoidonCreate(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}"/>

Solution 2:

first argument of Intent will be context, not class. Replace your first argument with MainActivity.this

newIntent(MainActivity.this, LoginActivity.class);

Solution 3:

change like below.

Intent login = newIntent(MainActivity.this, LoginActivity.class);
startActivity(login);

Solution 4:

First create new activity(MainActivity).check the following code.

publicclassMainActivityextendsAppCompatActivity {

Button btnLogin;

@OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnLogin = (Button) findViewById(R.id.loginBtn);

    btnLogin.setOnClickListener(newView.OnClickListener() {

        @OverridepublicvoidonClick(View arg0) {
            // TODO Auto-generated method stubIntenti=newIntent(MainActivity.this, LoginActivity.class);
            startActivity(i);
        }
    });
}
}

create another activity(LoginActivity). LoginActivity.java

publicclassLoginActivityextendsActivity {

@OverrideprotectedvoidonCreate(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"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.gami.activity"android:versionCode="1"android:versionName="1.0" ><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><actionandroid:name="android.intent.action.MAIN" /><categoryandroid:name="android.intent.category.LAUNCHER" /></intent-filter></activity><activityandroid:name="LoginActivity"android:screenOrientation="portrait" ></activity></application></manifest>

Solution 5:

Well you cannot start Activity from a custom class eg: Employee. All you can do is change the Architecture of your application so that you can start an Activity on some button click in the MainActivity.

and then to start

startActivity(newIntent(MainActivity.this, LoginActivity.class));

where MainActivity.this is the context and LoginActivity.class is that Activity to be started.

Post a Comment for "How To Start An Activity From A Plain Non-activity Java Class?"