setContentView в MainActivity, который находится в «Проекте библиотеки Android»

#java #android #android-activity #android-library

#java #Android #android-активность #android-библиотека

Вопрос:

У меня есть:

  • одно приложение без каких-либо действий и AndroidManifest.xml
  • один «Проект библиотеки Android» с активностью (MainActivity.java ) и Макет main.xml (res/макет)

В моем AndroidManifest.xml Я зарегистрировал класс MainActivity, который находится в «Проекте библиотеки Android». :

         <activity android:name=".MainActivity"  android:configChanges="orientation|keyboardHidden|screenSize" android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
  

Я могу запустить приложение и отладить onCreate MainActivity.

Теперь моя проблема. Когда я пытаюсь установить содержимое с помощью …

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        int resourceId = getResources().getIdentifier("main","layout", getPackageName());
        setContentView(ResourceId);
  

… Я получаю следующую ошибку:

 java.lang.NullPointerException
at android.view.ViewGroup.addViewInner(ViewGroup.java:3671)
at android.view.ViewGroup.addView(ViewGroup.java:3543)
at android.view.ViewGroup.addView(ViewGroup.java:3519)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:335)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:325)
at android.app.Activity.setContentView(Activity.java:1944)
  

Переменная «resourceId » имеет многообещающее значение: 2130903046, но, похоже, она не ссылается на действительный ресурс?

Дополнительная информация: я могу установить LinearLayout, который определен в том же main.xml без проблем:

 tbl = (LinearLayout) findViewById(getResourceId("main","id"));
  

ошибки нет.

Кто-нибудь может мне помочь?

Комментарии:

1. Почему вы не используете R.class ?

2. Я считаю, что, даже если ваша активность находится в вашем проекте библиотеки, вы также должны определить ее в своем другом проекте. Это как-то связано с именами пакетов и всем таким

3. В моем «Проекте библиотеки Android» у меня есть только R.java сгенерировано в com.example.mylib. Нет R.java в моем настоящем имени пакета.

4. В моем основном приложении у меня нет никакого пакета (Packagename). Так что, я думаю, конфликта имен пакетов быть не должно

Ответ №1:

Спасибо всем помощникам и извините, что трачу ваше время. Я нашел проблему.

main.xml должен находиться в Основном приложении. Это единственный ресурс, который должен быть в приложении. Остальные (все ресурсы) могут быть в проекте библиотеки.