2014-04-25 2 views
0

검색 한 적이 있지만 해결 방법이 하나도 없습니다. 내가QuickContactBadge가 충돌 함 응용 프로그램 :

QuickContactBadge contactBadge = (QuickContactBadge) findViewById(R.id.quickContactBadge); 

를 추가하는 경우 I가 충돌합니다. 다음으로 변경했습니다.

QuickContactBadge contactBadge; 

    protected void onCreate(Bundle savedInstanceState) { 

      ... 

      contactBadge = (QuickContactBadge) findViewById(R.id.quickContactBadge); 
    } 

그리고 충돌이 없습니다. 하지만 contactBadge.Anything();을 추가하면 충돌이 발생합니다. 아무리 0x메서드가 충돌합니다. I.E. contactBadge.assignContactFromEmail("[email protected]", true);

안드로이드 활동 :

public class MainActivity extends Activity { 

      QuickContactBadge contactBadge; 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 

       setContentView(R.layout.activity_main); 

       if (savedInstanceState == null) { 

        getFragmentManager().beginTransaction().add(R.id.container, new MainFragment()).commit(); 
       } 

       contactBadge = (QuickContactBadge) findViewById(R.id.quickContactBadge); 
       contactBadge.assignContactFromEmail("[email protected]", true); 
      } 

      public static class MainFragment extends Fragment { 

      public MainFragment() { 

      } 

      @Override 
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

       View rootView = inflater.inflate(R.layout.fragment_main, container, false); 

       return rootView; 
      } 
     } 

매니페스트 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.pointlight.android.kingdomcraft" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="14" 
     android:targetSdkVersion="19" /> 

    <uses-permission android:name="android.permission.READ_CONTACTS" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/android:Theme.Holo.NoActionBar" > 
     <activity 
      android:name="com.pointlight.android.kingdomcraft.MainActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="landscape" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

레이아웃 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.pointlight.android.kingdomcraft.MainActivity$MainFragment" > 


    <QuickContactBadge 
     android:id="@+id/quickContactBadge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 
+0

'findViewById'를 사용하기 전에 레이아웃을 팽창 시켰습니까? 그렇지 않으면'null '을 리턴한다. –

+0

'을 사용하고 [link] (http://stackoverflow.com/questions/5530625/android-strange-behaviour-in-quickcontactbadge) – Akshay

+0

을 참조하십시오. 그래, 내가 부풀려, 그 기본 생성 된 활동 방금 방금 방법을 손질 – SemperAmbroscus

답변

2

첫 번째 방법으로는 활동이 인스턴스화 될 때 findViewById()를 호출하고있어 그 멤버 변수 초기화됩니다. 활동에는 아직 Window이 없으며 NPE가됩니다. findViewById()은 또는 이후 setContentView() 다음에 만 호출하십시오.

두 번째 방법 : 제공된 ID가있는보기가있는보기 계층 구조가없는 setContentView()이 없습니다. null이 리턴되고 메소드를 호출하면 NPE가 호출됩니다.

나중에 추가 한 코드에서보기가 조각 레이아웃에 있고 활동 레이아웃이 아닌 것 같습니다. onCreate()의 활동 뷰 계층 구조의 일부가 아닙니다. 코드를 조각의 onCreateView()으로 옮겨야합니다 :

View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
contactBadge = (QuickContactBadge) rootView.findViewById(R.id.quickContactBadge); 
contactBadge.assignContactFromEmail("[email protected]", true); 
+0

내가 setContentView 그것은 대부분의 기본 생성 된 활동에 대한, 내 수업 게시해야합니까? – SemperAmbroscus

+0

일반적으로 예, 예외 스택 트레이스,'setContentView()'에서 사용 된 레이아웃 이름과 해당 레이아웃 XML은 향후 진단과 관련이 있습니다. – laalto

+0

글쎄, 나는 Aksh가 – SemperAmbroscus

관련 문제