2017-01-21 3 views
0

지금 당장 서버 측 데이터베이스에 저장된 사용자의 역할에 따라 앱의 주요 활동을 구현하려고합니다. 로그인시 장치로 리턴됩니다.Android : 사용자의 우선 순위에 따라 다른 activity_main.xml

여기서 Single application with different UIs depending on the user's role 달성하려는 주제와 비슷한 주제가 있었지만 달성하고자하는 것을 제공하지 못했습니다.

MainActivity의 onCreate()에서 로그인 활동을로드하고 있습니다. 그 후에 역할을 확인하고 그에 따라 다음을 사용합니다.

if (some condition here){ 
    //here I set the activity_main.xml 
} else if (condition again) { 
    //another variant of activity_main.xml 
} 

올바른 방법이 있습니까? 그렇지 않은 경우이를 달성 할 수있는 다른 방법이 있습니까? 그런데, 사용자 인터페이스 요소를 해당 조건부 블록 외부의 xml 값에 연결하면 나중에 가장 많은 권한을 가진 사용자의 로그인 자격 증명을 사용하더라도 해당 인터페이스의 최대 요소 (이름은 다음과 같습니다)의 NullPointerException이 계속 유지됩니다. 보기는 모든 XML 레이아웃에서 동일하며 파일의 요소 수는 다릅니다.

확실한 것은, 위의 링크와 같이 내 앱의 기본 화면으로 로그인 화면을 사용하는 것이 좋지만 앱을 시작할 때마다 로그인을 요구하지 않으므로 나는이 모든 것들을 깨닫는 법을 정말로 모른다.

도움을 주시면 감사하겠습니다.

+0

다른 init() 메소드를 사용하여 레이아웃을 설정하고 해당 객체를 초기화 할 때 – Ak9637

+0

은 MainActivity 또는 MainActivity의 뷰에 차이가 있습니까?당신은 다른 사용자의 previleges에 대한 다른 레이아웃이나 조각을 부 풀릴 수 있기 때문에 – aldok

답변

1

onCreate()의 조건에 따라 다른 레이아웃을 적용 할 수 있습니다 : setContentView(R.layout.your_layout);. 레이아웃에서 사용하지 않는 위젯을 초기화하지 마십시오. 오류가 발생할 수 있습니다.

더 완전한 예제 : 그것은 레이아웃을로드하는 대신 응용 프로그램 충돌 때문에 나는 또한 이벤트 무언가에 else 조건을 떠날 것을 권 해드립니다

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (condition1) 
     setContentView(R.layout.your_layout1); 
    else 
     setContentView(R.layout.your_layout2); 
} 

은 잘못.

+1

입력 한 내용은 내가 실제로하는 것입니다. 조건부 코드 블록에로드 된 활동 파일에서 뷰를 초기화 할 때 NullPointerException을 계속 가져 왔기 때문에 이것이 올바른 접근 방식이 아니라고 생각했습니다. 당신의 힌트를 가져 주셔서 감사합니다. – Rebellious

0

나의 제안은 당신이뿐만 **activity_main.xml****activity_main_two.xml**가있는 가정이 될 것입니다 당신이 xml 각각은 서로 다른 역할의 어떤 종류를 확인하기 위해 로그인 섹션에서 체크하여 암호이름을 파일 사용자가 로그인했으면 나중에 논리를 작성합니다.

if (user_is_an_executive){ 
setContentView(R.layout.activity_main.xml); 
} 
else if (user_is_another_employee){ 
setContentView(R.layout.activity_main_two.xml); 
} 

참고 :

당신이 회사에 두 명의 사용자 아래이 의사 코드와 같은 관리자종업원

E, G 있다고 가정

이것을 t에 넣으십시오. 그는 onCreate 메소드

관련 문제