0

私には2つの活動があります。ScreenOne.javaおよびScreenTwo.java。

ScreenOneはBaseScreenを拡張しますScreenTwoは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;
    }

次の回避策のいずれかが必要です。

  • ScreenTwoをBaseScreenを拡張する
  • 「厄介な」コード行の代替
  • [戻る]ボタンを上書きして、新しいアクティビティを開始します。

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)
4

2 に答える 2

0

Make ScreenTwo extend BaseScreen

変更する必要があるのは次の項目のみです。

XML で:

ListView を削除id = "@android:id/list" して、次のようにします id = "@+id/yourListView"

および使用する代わりにアクティビティで

this.mainListView = getListView();

使用する

ListView yourListView = (ListView) findViewById(R.id.yourListView);

変更する必要があるのはこれらだけです。これらを変更した後、必要なものが得られない場合。次に、継承の問題ではなく、他の理由によるものです

または、3番目のポイントに従って、これを使用します:

@Override
public void onBackPressed() {

   Intent intent = new Intent(CurrentActivity.this, ScreenThree.class);
   startActivity(setIntent);
}
于 2012-09-07T11:06:09.303 に答える
0

@android:id/listListView の 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.

このように、を拡張する必要はありませんListActivity

于 2012-09-07T10:15:58.133 に答える