2013-02-19 4 views
2

비슷한 코드를 사용하여 세 가지 Android 앱을 만들었지 만 앱 맞춤 설정시 유연성을 유지해야합니다. 내 솔루션은 지금, 라이브러리 프로젝트를 가지고 있는데, 여기서 클래스를 확장하여 프로젝트의 기능을 무시할 수 있습니다. 다음 예제에서 라이브러리 프로젝트 PL을 호출합니다. P1은 PL을 사용하는 맞춤 프로젝트이고 P2는 PL을 사용하는 또 다른 맞춤 프로젝트입니다.Android 라이브러리 프로젝트의 클래스 재정의

이제 PL에서 StudentPL.java의 인스턴스를 만들고 싶습니다. P1에서는 StudentPL을 변경할 필요가 없으므로 컴파일러가이 클래스를 사용해야하지만 P2에서는 StudentPL.java에서 확장되는 StudentP2.java가 있습니다. 따라서 PL로 작성된 인스턴스는 StudentP2.java의 인스턴스 여야합니다.

내 생각은 이제 프로젝트 PL의 src-Folder에 직접있는 mirror라는 패키지를 만든다. 거기서 클래스 mirror.Student.java가 StudentPL.java에서 확장됩니다. Library-Project에서는 이제 Student.java의 인스턴스를 만듭니다. 프로젝트 P1에는 변경이 필요하지 않습니다. P2에서는 src 폴더에 동일한 폴더 미러를 만들고 StudentP2.java에서 확장 한 동일한 클래스 mirror.Student.java를 만듭니다.

  • 덱스 로더] 덱스를 실행할 수 없습니다 : 아이디어는 클래스 로더는 이제 P2에서 mirror.Student.java을로드하고 PL에서 mirror.Student.java을 무시하지만이 다음과 같은 오류가 발생한다는이며, 여러 덱스 파일은 Lmirror/Student를 정의합니다.
  • 는 는 달빅 형식으로
  • 변환 실패 : 덱스를 실행할 수 없습니다 : 여러 덱스 파일이 Lmirror/학생

다음의 UML입니다 정의 나는 무슨 말인지 :

http://www.koenix-band.ch/images/other/Stackoverflow.gif

아마 ClassLoader를 덮어 써야하지만, 어떻게해야할지 모르겠다. 누구든지이 문제를 해결할 생각이 있습니까? 어쩌면 다른 사람이 아이디어를 가지고 어떻게 앱을 사용자 정의 할 수 있을지도 모릅니다.

마이클

제 생각에는

답변

0

이 만드는 더 나은 것를 A setStudent 또는 이와 유사한 방법으로 추상적 인 MainActivityPL. 활동의 대부분과 모든 논리는 여전히 라이브러리에서 공유되지만 StudentPL 클래스를 확장하여 다른 프로젝트에 다른 학생 개체를 사용하는 옵션을 허용합니다.

+0

답변 주셔서 감사합니다. 실제로 이전에 작성한 방법입니다. 데이터베이스 연산의 경우 ORMLite를 사용합니다. 여기에는 제네릭 형식이 필요합니다. 그런 다음 다른 제네릭 형식에서 전달해야합니다. 모델이 많을 때 처리하기가 정말 멋지지 않기 때문에 더 쉽게 사용할 수있는 방법을 찾고 싶습니다. 다른 문제는 내 앱이 시간이 지나면 조금 복잡해 졌다는 것입니다. 그래서이 객체의 인스턴스를 만드는 MainActivityPL .java뿐만 아니라 더 많은 방법이 있습니다. 이 문제를 해결하기 위해 getStudent() abstract 메서드를 만들었으므로 항상 올바른 개체를 얻을 수 있습니다. – user2087312