Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使活动扩展ListActivity扩展BaseScreen_Android_Android Listview - Fatal编程技术网

Android 使活动扩展ListActivity扩展BaseScreen

Android 使活动扩展ListActivity扩展BaseScreen,android,android-listview,Android,Android Listview,我有两项活动。ScreenOne.java和ScreenTwo.java ScreenOne扩展了BaseScreen Screen2扩展了ListActivity 我希望ScreenTwo扩展BaseScreen,因为后退按钮事件使应用程序崩溃 this.mainListView = getListView(); 如果我更改扩展名,这是唯一引发错误的行 错误是: The method getListView() is undefined for the type ScreenTwo. 我的

我有两项活动。ScreenOne.java和ScreenTwo.java

ScreenOne扩展了BaseScreen Screen2扩展了ListActivity

我希望ScreenTwo扩展BaseScreen,因为后退按钮事件使应用程序崩溃

this.mainListView = getListView();
如果我更改扩展名,这是唯一引发错误的行

错误是:

The method getListView() is undefined for the type ScreenTwo.
我的后退按钮代码:

 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
     Intent intent = new Intent(getBaseContext(), ScreenThree.class); 
     startActivity(intent); 
        }
        return true;
    }
我需要以下解决方法之一:

  • 使屏幕2扩展基本屏幕
  • “麻烦”代码行的替代方案
  • 覆盖“上一步”按钮以启动新活动
LogCat输出:

09-07 11:30:13.419: E/AndroidRuntime(2845): FATAL EXCEPTION: main
09-07 11:30:13.419: E/AndroidRuntime(2845): java.lang.ClassCastException: com.example.Droid.Screens.ScreenTwo
09-07 11:30:13.419: E/AndroidRuntime(2845): at com.example.Droid.Services.ScreenService.getCurrentScreen(ScreenService.java:226)
09-07 11:30:13.419: E/AndroidRuntime(2845): at com.example.Droid.Screens.BaseScreen.processKeyDown(BaseScreen.java:310)
09-07 11:30:13.419: E/AndroidRuntime(2845): at com.example.Droid.Main.onKeyDown(Main.java:183)
09-07 11:30:13.419: E/AndroidRuntime(2845): at android.view.KeyEvent.dispatch(KeyEvent.java:1256)
09-07 11:30:13.419: E/AndroidRuntime(2845): at android.app.Activity.dispatchKeyEvent(Activity.java:2078)
09-07 11:30:13.419: E/AndroidRuntime(2845): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1709)
09-07 11:30:13.419: E/AndroidRuntime(2845): at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2628)
09-07 11:30:13.419: E/AndroidRuntime(2845): at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2603)
09-07 11:30:13.419: E/AndroidRuntime(2845): at android.view.ViewRoot.handleMessage(ViewRoot.java:1875)
09-07 11:30:13.419: E/AndroidRuntime(2845): at android.os.Handler.dispatchMessage(Handler.java:99)
09-07 11:30:13.419: E/AndroidRuntime(2845): at android.os.Looper.loop(Looper.java:123)
09-07 11:30:13.419: E/AndroidRuntime(2845): at android.app.ActivityThread.main(ActivityThread.java:3687)
09-07 11:30:13.419: E/AndroidRuntime(2845): at java.lang.reflect.Method.invokeNative(Native Method)
09-07 11:30:13.419: E/AndroidRuntime(2845): at java.lang.reflect.Method.invoke(Method.java:507)
09-07 11:30:13.419: E/AndroidRuntime(2845): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
09-07 11:30:13.419: E/AndroidRuntime(2845): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
09-07 11:30:13.419: E/AndroidRuntime(2845): at dalvik.system.NativeStart.main(Native Method)

如果您使用
@android:id/list
作为ListView的id,请使用:

ListView listView = (ListView) findViewByID(android.R.id.list);
其他用途:

ListView listView = (ListView) findViewByID(R.id.listView); // the id of your listView given in xml file.

这样,您就不必扩展
列表活动

Make screen两个扩展基本屏幕

您只需要更改以下内容:

在XML中:

删除ListView的
id=“@android:id/list”
,并使其类似于
id=“@+id/yourListView”

在活动中,而不是使用

this.mainListView = getListView();
使用

这些是你唯一需要改变的事情。如果你在改变这些之后没有得到你想要的。那是因为其他原因,而不是继承问题

或者根据您的第三点,使用以下内容:

@Override
public void onBackPressed() {

   Intent intent = new Intent(CurrentActivity.this, ScreenThree.class);
   startActivity(setIntent);
}

我试过了,得到了以下错误:由:java.lang.RuntimeException引起:无法实例化活动组件信息{com.example.Droid.Screens.ScreenTwo}:java.lang.InstantiationException:com.example.Droid.Screens.ScreenTwo错误在上面,我尝试过这两种方法,请查看日志的编辑您可能正在使用构造函数,但它不是适当的构造函数,或者您的构造函数正在引发异常。请不要使用getBaseContext()而使用Activity。在onKeyDown()中,您的ClassCastException发生在以下行:com.example.Droid.Services.ScreenService.getCurrentScreen(ScreenService.java:226)。你能发布这句话吗?我想问题出在别处,因为当我尝试这句话时它不起作用:(不起作用!!…有任何异常吗?或者工作正常,但不符合预期?请看下面的评论:)然后只需覆盖按下的后退按钮。如果这是您想要扩展后退屏幕的唯一原因,则上面日志中显示的错误就是我这样做时发生的情况
@Override
public void onBackPressed() {

   Intent intent = new Intent(CurrentActivity.this, ScreenThree.class);
   startActivity(setIntent);
}