Android - как структурировать новый класс Activity? - PullRequest
0 голосов
/ 20 февраля 2012

У меня есть пример активности на домашней странице, который работает нормально. Теперь я пытаюсь сделать так, чтобы на нем была кнопка, которая заставляет приложение перейти на следующий экран.

Итак, я добавил второе действие в манифест приложения:

<activity
    android:name=".AddProblemActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>        

Но мне интересно, должно ли оно иметь эти две строки:

    <action android:name="android.intent.action.MAIN" />

    <category android:name="android.intent.category.LAUNCHER" />

Кажется, что MAIN говорит, что должна быть функция main (). Но разве это не должно существовать только на главной странице?

Вот полная трассировка стека:

02-20 10:17:04.408: D/gralloc_goldfish(646): Emulator without GPU emulation detected.
02-20 10:18:58.655: D/AndroidRuntime(646): Shutting down VM
02-20 10:18:58.665: W/dalvikvm(646): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
02-20 10:18:58.745: E/AndroidRuntime(646): FATAL EXCEPTION: main
02-20 10:18:58.745: E/AndroidRuntime(646): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.problemio/com.problemio.AddProblemActivity}: java.lang.NullPointerException
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.app.ActivityThread.access$600(ActivityThread.java:123)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.os.Looper.loop(Looper.java:137)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.app.ActivityThread.main(ActivityThread.java:4424)
02-20 10:18:58.745: E/AndroidRuntime(646):  at java.lang.reflect.Method.invokeNative(Native Method)
02-20 10:18:58.745: E/AndroidRuntime(646):  at java.lang.reflect.Method.invoke(Method.java:511)
02-20 10:18:58.745: E/AndroidRuntime(646):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
02-20 10:18:58.745: E/AndroidRuntime(646):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
02-20 10:18:58.745: E/AndroidRuntime(646):  at dalvik.system.NativeStart.main(Native Method)
02-20 10:18:58.745: E/AndroidRuntime(646): Caused by: java.lang.NullPointerException
02-20 10:18:58.745: E/AndroidRuntime(646):  at com.problemio.AddProblemActivity.onCreate(AddProblemActivity.java:28)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.app.Activity.performCreate(Activity.java:4465)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
02-20 10:18:58.745: E/AndroidRuntime(646):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
02-20 10:18:58.745: E/AndroidRuntime(646):  ... 11 more

Это часть моего onCreate от AddProblemActivity вызывает ошибку вроде:

    final EditText problemName = (EditText) findViewById(R.id.problem_name);  
    String name = problemName.getText().toString(); // THIS LINE  

Вот мой xml-файл для имя_проблемы из XML-макета:

    <EditText  
        android:id="@+id/problem_name"  
        android:layout_height="wrap_content"  
        android:hint="@string/problem_name"  
        android:inputType="textPersonName"  
        android:layout_width="fill_parent">  
    </EditText>  

Спасибо, Alex

Ответы [ 2 ]

1 голос
/ 24 февраля 2012
  1. Измените тег категории новой деятельности на android.intent.category.DEFAULT вместо android.intent.category.LAUNCHER.
  2. Измените имя действия на другое значение, например android.intent.action.AddProblemActivity
1 голос
/ 20 февраля 2012

Переменная problemName, вероятно, равна нулю. Проверьте, если это так, и убедитесь, что вы сделали setContentView с макетом, который содержит такой идентификатор. Если вы это сделаете, вы также можете попытаться очистить среду сборки, если используете IDE, такую ​​как Eclipse или IntelliJ IDEA, поскольку они иногда сохраняют старые сгенерированные R-файлы.

У вас не должно быть этого фильтра намерений, если вы не хотите, чтобы второе занятие отображалось на главном экране.

<activity
android:name=".AddProblemActivity"
android:label="@string/app_name" />

будет делать, если вы просто хотите иметь возможность начать второе действие (AddProblemActivity) с первого.

Ознакомьтесь с http://developer.android.com/guide/topics/intents/intents-filters.html, чтобы узнать о фильтрах Intent и Intent.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...