我在Android中有5个左右的活动(下面显示了其中的2个),它们共享一个公共的导航抽屉。如果我从导航抽屉登录到某个帐户,则在成功登录后,需要加载之前显示的活动。是否可以通过intent发送活动上下文?
FirstActivity.java
Intent intent1 = new Intent(FirstActivity.this, Login.class);
intent1.putExtra("activity", "FirstActivity");
startActivity(intent1);
finish();
SecondActivity.java
Intent intent2 = new Intent(SecondActivity.this, Login.class);
intent2.putExtra("activity", "SecondActivity");
startActivity(intent2);
finish();
在登录活动中找到要返回的活动名称时,登录成功后返回。
Login.java
Intent intent3 = getIntent();
String activity = intent3.getStringExtra("activity");
...
Intent intent4 = new Intent(Login.this, Class.forName(activity));
startActivity(intent4);
finish();
返回以下错误消息:
W/System.err: java.lang.ClassNotFoundException: Home
at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:453)
有谁知道怎么修理它吗?
使用intent1.putExtra("activity", String.valueOf(FirstActivity.this));
也是行不通的,它说com.example.nativeapp.FirstActivity@6a7640
是一个无效的类名。
当我试图通过intent发送这些变量值时,我应该将活动上下文转换为Serializable或Parcelable甚至CharSequence吗?Activity或AppCompatActivity似乎没有继承Serializable或Parcelable来解决这个问题。CharSequence似乎与使用字符串没有太大区别。
我知道我可以创建自己的类来存储全局变量和活动上下文,我的活动可以继承它,但是因为我的活动已经继承了NavigationDrawer,所以我的活动不能继承第二个类。我是否可以将其声明为一个接口并继承一个接口以从接口访问全局变量值?Getter和setter方法肯定不能在接口中工作,因为接口中不允许实现函数和声明变量值。
当我试图从一个活动移动到另一个活动时,我一直在考虑使用中央超类来存储变量值并从子类中更改它们,其中一个原因是像这样的活动上下文,我不确定如何通过意图传递它们。这种意图也应该能够在移动应用程序的其他中央全局变量中从一个活动类传递到另一个活动类。中央超类,比如NavigationDrawer,它是一个很好的候选者,因为我所有的Android活动类都是从它继承而来的,如果所有的中央全局变量都存储在它里面,并且当我试图从一个活动移动到另一个活动时,它们从子类中改变,那么最好使用它。
我该怎么做呢?
发布于 2019-09-24 10:20:11
您正在尝试记住上一个活动,然后开始下一个特定的活动。这是做这件事的方法
改变这一点
Intent intent = new Intent(Login.this, Class.forName(activity));
startActivity(intent);
finish();
对这个-
Intent intent = getIntent();
String lastActivity = intent.getStringExtra("activity"); // lastActivity
if (lastActivity.equalsIgnoreCase("FirstActivity")) {
Intent intent = new Intent(Login.this, FirstActivity.class);
startActivity(intent);
finish();
} else if (lastActivity.equalsIgnoreCase("SecondActivity")) {
Intent intent = new Intent(Login.this, SecondActivity.class);
startActivity(intent);
finish();
}
创建通用方法来优化您的代码
发布于 2019-09-25 11:46:53
您需要提供完全限定的类名。您需要传递"my.fully.qualified.class.name.FirstActivity"
而不是"FirstActivity"
,您可以在其中提供完全限定的类名。
https://stackoverflow.com/questions/58077955
复制相似问题