Приложение Android вылетает при попытке загрузить макет из проекта библиотеки - PullRequest
1 голос
/ 04 января 2012

У меня есть проект библиотеки, скажем, LibProj, в котором есть файл макета common.xml, в котором у меня есть RelativeLayout с идентификаторомlativeLayout1.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativeLayout1"

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

public class AppStarter extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativeLayout1);
        setContentView(layout);

Я ссылался на проект библиотеки в проекте приложения. В IDE eclipse не отображается никаких ошибок, но при запуске проекта на моем устройстве происходит сбой приложения.Я не знаю, что пошло не так ...?

Ответы [ 5 ]

3 голосов
/ 04 января 2012

Полагаю, вам нужно использовать LayoutInflater, чтобы надуть «common.xml», прежде чем использовать его и находить по идентификатору.

LayoutInflater inflater = (LayoutInflater)context.getSystemService
  (Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.common);

Нечто подобное, надеюсь, это поможет.

2 голосов
/ 04 января 2012

Вам нужно будет добавить имя пакета Java проекта Android Library

RelativeLayout v = (RelativeLayout) 
    findViewById(com.sample.library.R.id.relativeLayout1);

Другая проблема, которая возникнет, если автоматически включить сборку проекта eclipse, R-файл библиотеки будет заменен R-файлом проекта

Обходной путь: автоматически отключить сборку и вручную скопировать файл ресурса проекта библиотеки в основной проект - в соответствующую папку

enter image description here

2 голосов
/ 04 января 2012

layout в setContentView (layout) должен быть именем файла xml (например, R.layout.common).

1 голос
/ 04 января 2012

У меня раньше была такая же проблема: Причины

1) когда вы делаете

RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativeLayout1);

, она не знает, откуда она должна вызывать вашу относительнуюLayout1, поскольку она также может не соответствоватьс вашими ресурсами приложения.как идентификатор, назначенный во время выполнения.

1 голос
/ 04 января 2012

вам нужно создать папку с именем ' libs ' в папке ' res ', скопировать библиотеку в папку libs '

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