从 Fragment 启动 Activity 抛出 ClassNotFoundException
Launch Activity from Fragment throws ClassNotFoundException
我知道这是不可能的,但我尝试了很多解决方案并且 none 奏效了。
我正在尝试在点击按钮时从片段中启动 activity。
Fragment.java
public class Lev1 extends Fragment implements OnClickListener {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.lev1, null);
Button button1= (Button) v.findViewById(R.id.level1);
button1.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v) {
try {
Intent intent = new Intent(getActivity(), getActivity().getClassLoader().loadClass("es.uam.eps.dadm.SESSION"));
startActivity(intent);
}
catch(ClassNotFoundException e) {
//to handle carefully
Toast.makeText(context, "Class not found",
Toast.LENGTH_SHORT).show();
}
}
Fragment.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/level1"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_margin="8dp"
android:background="@drawable/fr1"
/>
</LinearLayout>
我想这不是包问题,因为如果我使用 activity 而不是片段,则以下效果很好:
Button button1= (Button)findViewById(R.id.level1);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startActivity(new Intent("es.uam.eps.dadm.SESSION"));
}
所以我不知道为什么当我尝试加载我的 SESSION class 时,另一种方式会引发 ClassNotFoundException。也许 intent
的声明是错误的?
在此先感谢您的帮助。
您的 es.uam.eps.dadm.SESSION 包文件夹中似乎没有 SESSION.java 文件,或者您在清单文件中遗漏了它
I don't know why the other way rises an ClassNotFoundException
es.uam.eps.dadm.SESSION
是您在 AndroidManifest.xml
中的 Activity 声明期间添加的操作名称。
从 Activity 开始,在 Button 上单击使用操作准备开始 Activity 的 Intent。但是从 Fragment 尝试加载 class 使用操作字符串而不是 class 名称和包名称 :
使用 class 名称加载 class 使用 loadClass
:
Intent intent = new Intent(getActivity(), getActivity().getClassLoader().
loadClass("es.uam.eps.dadm.<Class_Name>"));
我知道这是不可能的,但我尝试了很多解决方案并且 none 奏效了。 我正在尝试在点击按钮时从片段中启动 activity。
Fragment.java
public class Lev1 extends Fragment implements OnClickListener {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.lev1, null);
Button button1= (Button) v.findViewById(R.id.level1);
button1.setOnClickListener(this);
return v;
}
@Override
public void onClick(View v) {
try {
Intent intent = new Intent(getActivity(), getActivity().getClassLoader().loadClass("es.uam.eps.dadm.SESSION"));
startActivity(intent);
}
catch(ClassNotFoundException e) {
//to handle carefully
Toast.makeText(context, "Class not found",
Toast.LENGTH_SHORT).show();
}
}
Fragment.xml
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button
android:id="@+id/level1"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_margin="8dp"
android:background="@drawable/fr1"
/>
</LinearLayout>
我想这不是包问题,因为如果我使用 activity 而不是片段,则以下效果很好:
Button button1= (Button)findViewById(R.id.level1);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startActivity(new Intent("es.uam.eps.dadm.SESSION"));
}
所以我不知道为什么当我尝试加载我的 SESSION class 时,另一种方式会引发 ClassNotFoundException。也许 intent
的声明是错误的?
在此先感谢您的帮助。
您的 es.uam.eps.dadm.SESSION 包文件夹中似乎没有 SESSION.java 文件,或者您在清单文件中遗漏了它
I don't know why the other way rises an ClassNotFoundException
es.uam.eps.dadm.SESSION
是您在 AndroidManifest.xml
中的 Activity 声明期间添加的操作名称。
从 Activity 开始,在 Button 上单击使用操作准备开始 Activity 的 Intent。但是从 Fragment 尝试加载 class 使用操作字符串而不是 class 名称和包名称 :
使用 class 名称加载 class 使用 loadClass
:
Intent intent = new Intent(getActivity(), getActivity().getClassLoader().
loadClass("es.uam.eps.dadm.<Class_Name>"));