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?"